de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 BeanBagKing
BeanBagKing
Question

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"
81 2013-10-31T03:15:15+00:00 10
 martineau
martineau
Pertanyaan edit 24 Februari 2018 в 3:08
Pemrograman
csv
python
json
Solution / Answer
 SingleNegationElimination
SingleNegationElimination
31 Oktober 2013 в 12:49
2013-10-31T12:49:43+00:00
Lebih
Sumber
Sunting
#22673254

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.

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')
124
0
 Naufal
Naufal
2 Februari 2017 в 12:13
2017-02-02T12:13:15+00:00
Lebih
Sumber
Sunting
#22673260

Anda dapat menggunakan Panda DataFrame untuk mencapai hal ini, dengan Contoh berikut:

import pandas as pd
csv_file = pd.DataFrame(pd.read_csv("path/to/file.csv", sep = ",", header = 0, index_col = False))
csv_file.to_json("/path/to/new/file.json", orient = "records", date_format = "epoch", double_precision = 10, force_ascii = True, date_unit = "ms", default_handler = None)
14
0
Lawrence  I. Siden
Lawrence I. Siden
25 November 2015 в 10:25
2015-11-25T22:25:17+00:00
Lebih
Sumber
Sunting
#22673257

Aku mengambil @SingleNegationElimination's respon dan disederhanakan menjadi tiga liner yang dapat digunakan dalam pipa:

import csv
import json
import sys

for row in csv.DictReader(sys.stdin):
    json.dump(row, sys.stdout)
    sys.stdout.write('\n')
9
0
 Laxman
Laxman
6 Januari 2018 в 7:58
2018-01-06T19:58:46+00:00
Lebih
Sumber
Sunting
#22673261
import csv
import json

file = 'csv_file_name.csv'
json_file = 'output_file_name.json'

#Read CSV File
def read_CSV(file, json_file):
    csv_rows = []
    with open(file) as csvfile:
        reader = csv.DictReader(csvfile)
        field = reader.fieldnames
        for row in reader:
            csv_rows.extend([{field[i]:row[field[i]] for i in range(len(field))}])
        convert_write_json(csv_rows, json_file)

#Convert csv data into json
def convert_write_json(data, json_file):
    with open(json_file, "w") as f:
        f.write(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': '))) #for pretty
        f.write(json.dumps(data))

read_CSV(file,json_file)

Dokumentasi dari json.kesedihan()

6
0
Snork S
Snork S
8 Februari 2015 в 3:20
2015-02-08T15:20:06+00:00
Lebih
Sumber
Sunting
#22673256

Anda dapat mencoba ini

import csvmapper

# how does the object look
mapper = csvmapper.DictMapper([ 
  [ 
     { 'name' : 'FirstName'},
     { 'name' : 'LastName' },
     { 'name' : 'IDNumber', 'type':'int' },
     { 'name' : 'Messages' }
  ]
 ])

# parser instance
parser = csvmapper.CSVParser('sample.csv', mapper)
# conversion service
converter = csvmapper.JSONConverter(parser)

print converter.doConvert(pretty=True)

Edit:

Pendekatan yang lebih sederhana

import csvmapper

fields = ('FirstName', 'LastName', 'IDNumber', 'Messages')
parser = CSVParser('sample.csv', csvmapper.FieldMapper(fields))

converter = csvmapper.JSONConverter(parser)

print converter.doConvert(pretty=True)
Snork S
Snork S
Jawaban edit 23 Agustus 2016 в 2:57
6
0
Wayne Werner
Wayne Werner
31 Oktober 2013 в 3:17
2013-10-31T03:17:40+00:00
Lebih
Sumber
Sunting
#22673252

Tambahkan indent parameter json.kesedihan

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

Juga perhatikan bahwa, anda hanya dapat menggunakan json.dump dengan membuka jsonfile:

json.dump(data, jsonfile)
 satoru
satoru
Jawaban edit 31 Oktober 2013 в 3:19
2
0
 impiyush
impiyush
7 Juli 2016 в 5:10
2016-07-07T17:10:20+00:00
Lebih
Sumber
Sunting
#22673258

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.

1
0
Mark Channing
Mark Channing
18 Agustus 2016 в 3:50
2016-08-18T15:50:42+00:00
Lebih
Sumber
Sunting
#22673259

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.

import csv, json

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

fieldnames = ("Scope","Comment","OOS Code","In RMF","Code","Status","Name","Sub Code","CAT","LOB","Description","Owner","Manager","Platform Owner")
reader = csv.DictReader(csvfile , fieldnames)

code = ''
for row in reader:
    try:
        print('+' + row['Code'])
        for key in row:
            row[key] = row[key].decode('utf-8', 'ignore').encode('utf-8')      
        json.dump(row, jsonfile)
        jsonfile.write('\n')
    except:
        print('-' + row['Code'])
        raise
1
0
 GarciadelCastillo
GarciadelCastillo
5 Maret 2014 в 7:43
2014-03-05T19:43:35+00:00
Lebih
Sumber
Sunting
#22673255

Sebagai sedikit perbaikan untuk @MONTYHS menjawab, iterasi melalui tup dari fieldnames:

import csv
import json

csvfilename = 'filename.csv'
jsonfilename = csvfilename.split('.')[0] + '.json'
csvfile = open(csvfilename, 'r')
jsonfile = open(jsonfilename, 'w')
reader = csv.DictReader(csvfile)

fieldnames = ('FirstName', 'LastName', 'IDNumber', 'Message')

output = []

for each in reader:
  row = {}
  for field in fieldnames:
    row[field] = each[field]
output.append(row)

json.dump(output, jsonfile, indent=2, sort_keys=True)
0
0
 MONTYHS
MONTYHS
31 Oktober 2013 в 12:03
2013-10-31T12:03:05+00:00
Lebih
Sumber
Sunting
#22673253
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)
-1
0
Related communities 6
Python Indonesia
Python Indonesia
24 686 pengguna
Programmer Python Indonesia. Group ini dikelola oleh sejumlah admin. Baca pesan tersemat / pinned message: https://t.me/pythonID/217588
Buka telegram
Indonesian Python Warriors
Indonesian Python Warriors
1 462 pengguna
Di grup ini tidak ada kewajiban untuk menggunakan username dan foto. Yang tidak boleh adalah spamming. Gak boleh baper, kalau nanya yang bener, eror jangan difoto pake HP, gunakan screenshot, code copas ke pastebin.com lalu share link ke sini.
Buka telegram
Python-ID Jogja
Python-ID Jogja
962 pengguna
Buka telegram
BASIC PYTHON INDONESIA
BASIC PYTHON INDONESIA
214 pengguna
Buka telegram
Python Newbie Indonesia
Python Newbie Indonesia
180 pengguna
Peraturan grup Python Newbie 🌻Dilarang spam 🌻Dilarang menggunakan bahasa kasar 🌻Dilarang beriklan di grup tanpa seizin admin Beberapa video dasar python dapat diliat melalui channel youtube juan aditya Jangan lupa untuk subscribe ya🙏
Buka telegram
PythonWealth Indonesia 🇮🇩
PythonWealth Indonesia 🇮🇩
29 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
RU
TR
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi