Bagaimana mengkonversi file CSV untuk multiline JSON?
Berikut ini's kode saya, benar-benar hal-hal sederhana...
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)
Menyatakan beberapa nama field, pembaca menggunakan CSV untuk membaca file, dan mengajukan nama-nama untuk dump file ke format JSON. Berikut ini's masalah...
Setiap record dalam file CSV adalah pada baris yang berbeda. Aku ingin JSON output yang akan dengan cara yang sama. Masalah itu kesedihan itu semua di satu raksasa, panjang garis.
I've mencoba menggunakan sesuatu seperti untuk baris di csvfile:
dan kemudian menjalankan kode di bawah ini yang dengan reader = csv.DictReader( line, fieldnames)
yang loop melalui masing-masing jalur, tetapi tidak seluruh file pada satu baris, maka loop melalui seluruh file pada baris lain... terus sampai berjalan keluar dari garis.
Saran untuk memperbaiki ini?
Edit: Untuk memperjelas, saat ini saya memiliki: (setiap record pada baris 1)
[{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"},{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}]
Apa yang saya'm-tempat ideal untuk: (2 catatan pada 2 baris)
{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"}
{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}
Tidak setiap individu bidang menjorok/pada baris terpisah, tetapi masing-masing record pada itu's line sendiri.
Beberapa contoh input.
"John","Doe","001","Message1"
"George","Washington","002","Message2"
Masalah dengan output yang diinginkan anda adalah bahwa hal itu tidak berlaku dokumen json,; it's a aliran dokumen json!
Yang's baik-baik saja, jika dengan apa yang anda butuhkan, tapi itu berarti bahwa untuk setiap dokumen yang anda inginkan di output anda, anda'll harus memanggil
json.kesedihan
.Sejak newline anda ingin memisahkan dokumen anda tidak terdapat dalam dokumen-dokumen tersebut, anda're di hook untuk memasok sendiri. Jadi kita hanya perlu menarik loop dari panggilan untuk json.dump dan menempatkan baris baru untuk setiap dokumen tertulis.
Anda dapat menggunakan Panda DataFrame untuk mencapai hal ini, dengan Contoh berikut:
Aku mengambil @SingleNegationElimination's respon dan disederhanakan menjadi tiga liner yang dapat digunakan dalam pipa:
Dokumentasi dari json.kesedihan()
Anda dapat mencoba ini
Edit:
Pendekatan yang lebih sederhana
Tambahkan
indent
parameterjson.kesedihan
Juga perhatikan bahwa, anda hanya dapat menggunakan
json.dump
dengan membukajsonfile
:Bagaimana menggunakan Panda untuk membaca file csv ke DataFrame (pd.read_csv), kemudian memanipulasi kolom jika anda ingin (menjatuhkan mereka atau memperbarui nilai-nilai) dan akhirnya mengubah DataFrame kembali ke JSON (pd.DataFrame.to_json).
Catatan: aku belum't diperiksa seberapa efisien ini akan tetapi ini adalah pasti salah satu cara termudah untuk memanipulasi dan mengubah besar csv untuk json.
Saya lihat ini sudah tua tapi aku butuh kode dari SingleNegationElimination namun saya punya masalah dengan data yang mengandung non utf-8 karakter. Ini muncul di bidang saya tidak terlalu peduli dengan jadi saya memilih untuk mengabaikan mereka. Namun yang mengambil beberapa upaya. Saya baru python jadi dengan beberapa trial dan error saya mendapatkannya untuk bekerja. Kode adalah salinan dari SingleNegationElimination dengan tambahan penanganan utf-8. Saya mencoba untuk melakukannya dengan https://docs.python.org/2.7/library/csv.html tapi pada akhirnya menyerah. Kode di bawah ini bekerja.
Sebagai sedikit perbaikan untuk @MONTYHS menjawab, iterasi melalui tup dari fieldnames: