1. ホーム
  2. python

[解決済み] CSVファイルを複数行のJSONに変換するには?

2022-10-08 04:43:32

質問

これは私のコードで、本当に単純なものです。

import csv
import json

csvfile = open('file.csv', 'r')
jsonfile = open('file.json', 'w')

fieldnames = ("FirstName","LastName","IDNumber","Message")
reader = csv.DictReader( csvfile, fieldnames)
out = json.dumps( [ row for row in reader ] )
jsonfile.write(out)

いくつかのフィールド名を宣言し、リーダーはCSVでファイルを読み、ファイル名を指定してJSON形式にダンプします。ここで問題なのが...

CSVファイルの各レコードは、異なる行にあります。JSONの出力も同じようにしたいのです。問題は、1 つの巨大で長い行にすべてをダンプすることです。

私は次のようなものを使ってみました。 for line in csvfile: のようなものを使ってみて、その下の私のコードを reader = csv.DictReader( line, fieldnames) で実行すると、各行をループしますが、1行でファイル全体を処理し、別の行でファイル全体をループし...行数がなくなるまで続けます。

これを修正するために何か提案はありますか?

編集:明確にするために、現在私は持っています。(1行目の各レコード)

[{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"},{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}]

探しているもの (2行に2レコード)

{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"}
{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}

個々のフィールドがインデントされ、別の行にあるのではなく、各レコードがそれ自身の行にあります。

いくつかの入力例です。

"John","Doe","001","Message1"
"George","Washington","002","Message2"

どのように解決するのですか?

この出力は、有効な json ドキュメントではないことが問題です。 json ドキュメントのストリーム !

必要なものであればそれでも構いませんが、出力したいドキュメントごとに json.dumps .

ドキュメントを区切るための改行は、それらのドキュメントには含まれていないので、自分で供給する必要があります。 したがって、json.dump の呼び出しからループを引き出して、書き込まれた各ドキュメントに対して改行を挿入すればよいのです。

import csv
import json

csvfile = open('file.csv', 'r')
jsonfile = open('file.json', 'w')

fieldnames = ("FirstName","LastName","IDNumber","Message")
reader = csv.DictReader( csvfile, fieldnames)
for row in reader:
    json.dump(row, jsonfile)
    jsonfile.write('\n')