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ü yapan
reader = 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"
İ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.
json.dumps
dosyasına
indent` parametresini ekleyinAyrıca,
json.dump
dosyasını açıkjsonfile
ile kullanabileceğinizi de unutmayın: