CSV dosyasını çok satırlı JSON'a nasıl dönüştürebilirim?

İşte kodum, gerçekten basit şeyler...

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)

Bazı alan adlarını bildirin, okuyucu dosyayı okumak için CSV kullanır ve dosyayı JSON biçimine dökmek için dosya adlarını kullanır. İşte sorun...

CSV dosyasındaki her kayıt farklı bir satırdadır. JSON çıktısının da aynı şekilde olmasını istiyorum. Sorun şu ki, hepsini devasa, uzun bir satıra döküyor.

for line in csvfile:gibi bir şey kullanmayı ve ardından kodumu her satırda döngü yapanreader = csv.DictReader( line, fieldnames)` ile çalıştırmayı denedim, ancak tüm dosyayı bir satırda yapıyor, sonra tüm dosyayı başka bir satırda döngü yapıyor... satırlar bitene kadar devam ediyor.

Bunu düzeltmek için bir öneriniz var mı?

Düzenleme: Açıklığa kavuşturmak için, şu anda elimde: (1. satırdaki her kayıt)

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

Aradığım şey: (2 satırda 2 kayıt)

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

Her bir alan girintili/ayrı bir satırda değil, her bir kayıt kendi satırında.

Bazı örnek girdiler.

"John","Doe","001","Message1"
"George","Washington","002","Message2"
Çözüm

İstediğiniz çıktıyla ilgili sorun, bunun geçerli bir json belgesi olmamasıdır; bu bir json belgeleri akışıdır!

İhtiyacınız olan şey buysa sorun değil, ancak bu, çıktınızda olmasını istediğiniz her belge için json.dumps dosyasını çağırmanız gerektiği anlamına gelir.

Belgelerinizi ayırmak istediğiniz satırsonu bu belgelerde bulunmadığından, bunu kendiniz sağlamak zorundasınız. Bu yüzden döngüyü json.dump çağrısından çıkarmamız ve yazılan her belge için araya yeni satır eklememiz gerekiyor.

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')
Yorumlar (6)

json.dumpsdosyasınaindent` parametresini ekleyin

 data = {'this': ['has', 'some', 'things'],
         'in': {'it': 'with', 'some': 'more'}}
 print(json.dumps(data, indent=4))

Ayrıca, json.dump dosyasını açık jsonfile ile kullanabileceğinizi de unutmayın:

json.dump(data, jsonfile)
Yorumlar (1)
import csv
import json
csvfile = csv.DictReader('filename.csv', 'r'))
output =[]
for each in csvfile:
    row ={}
    row['FirstName'] = each['FirstName']
    row['LastName']  = each['LastName']
    row['IDNumber']  = each ['IDNumber']
    row['Message']   = each['Message']
    output.append(row)
json.dump(output,open('filename.json','w'),indent=4,sort_keys=False)
Yorumlar (4)