CSVからJSONに変換をPythonでやってみる

CSVは厳密な仕様が決められていないのでエスケープや改行の扱いに難がありますが、ExcelやSpreadsheetsから変換できるので非エンジニアとやり取りするには便利なフォーマットです。

ただプログラムで扱うにはカンマ区切りを配列に直し、ラベルの位置と対応付けて操作しなければならないのでちょっと面倒です。プログラムで扱うためにはJSONとかの方がお手軽です。

そこで今回はCSVからJSONを作るスクリプトをPythonで書いてみました。

やりたいこと

AAA,BBB,CCC
123,456,789
111,222,333

今回はこんな形のCSV(カンマ区切りのテキストファイル)を考えてみます。1行めが列のラベルで、2行目以降が実際の値が入っているようなファイルです。

[
    '{"AAA": "123", "BBB": "456", "CCC": "789"}', 
    '{"AAA": "111", "BBB": "222", "CCC": "333"}'
]

CSVをこんな感じでJSONに変換するのが今回のゴールです。全体の配列の中に1行1オブジェクトが入っており、各オブジェクトはラベルと値が対応付けられています。ラベルが各行に入っているのでデータサイズとしては大きくなってしまいますが、プログラムで扱うには便利な形式になります。

実装

# coding: utf-8
import csv, json
print([json.dumps(l) for l in csv.DictReader(open('hoge.csv'))])

なんと3行で書けます。Python便利ですね。

import csv
import json

result = []

with open('hoge.csv') as f:    
    for line in csv.DictReader(f):
        line_json = json.dumps(line)
        result.append(line_json)
print(result)

もうちょっと丁寧に書くとこんな感じ。
Python標準のcsvモジュールがCSVのパースやラベル行との対応付けを面倒見てくれるので、こちらがやることはほとんど無いです。1行づつJSONにして全体の配列に入れて出力するだけ。

一つ問題があるとするならCSVが大きすぎる場合メモリを使いきってしまうことですね。result配列にJSON化したデータを入れていくのでやたら行が大きい場合はメモリを使いきってしまう可能性が無くはないです。そういう場合はresultみたいな変数を使わず、1行づつ標準出力なりファイルなりに書きだしていくように書きなおせば大丈夫です。JSONとして書き出すには全体を覆う「[]」と、最後の行以外に「,」も合わせて出力する必要があるのでちょっと複雑ですが。

Mon, 2 Nov 2015 12:24:05 +0000   |   Category:Python

関連記事

About Me

kimihiro-n

Androidアプリを中心にいろいろアプリ作ってます。
T N G

Products

放課後アプリ部
放課後アプリ部
個人アプリ開発者のための集客プラットフォーム作りました。 AndroidやiOSアプリのダウンロード数増加を無料で手伝います!

最速のJSON可視化・解析ツール
JSONを使った開発をスムーズにするためのツールです。 特定の値までのパスを簡単に取れます。
過去に作ったiOSアプリ
明日から本気出すタスク管理 for iOS
過去に作ったAndroidアプリ
明日から本気出すタスク管理 for Android Nagareboshi taplight
Others..

Search Articles