Я пытался преобразовать файл csv в json с помощью python 3. Я хочу преобразовать файл csv, который будет выглядеть примерно так:
Key ,Field_1 ,Field_2 ...
0 ,a ,e ...
1 ,b ,f ...
2 ,c ,g ...
3 ,d ,h ...
В структурированный файл json. Ключ: [Поле_1, Поле_2, ...]
Так что csv выше будет выглядеть как
{
"0" : ["a", "e", ...]
"1" : ["b", "f", ...]
"2" : ["c", "g", ...]
"3" : ["d", "h", ...]
}
Я пытался использовать приведенный ниже код, но не смог заполнить недостающие части, например присвоить каждое значение соответствующей части в файле json.
csv = pd.read_csv("file.csv")
n = 0
length = # number of keys
for i in csv:
if n == 0:
for y in range(lentgh):
# Assign as the header
else:
for y in range(length):
# Assign as the properties
n += 1
Также я пытаюсь сделать так, чтобы все новые данные автоматически добавлялись в конец файла json.






json по-прежнему будет отступать от списков значений, но это преобразует ваш csv в нужный словарь и добавит его в файл json.
import csv
import json
with open('blah.csv') as f:
reader = csv.reader(f)
next(reader)
d = dict((rows[0], rows[1:]) for rows in reader)
with open('blah.json', 'a') as f:
json.dump(d, f, indent=4)
У меня проблема с последней строкой, в ней говорится: «dumps () принимает 1 позиционный аргумент, но было дано 2 позиционных аргумента», в основном это не позволяет мне иметь и d, и f
@PSM ой, извините, да, должно быть dump, вы поняли :)
И еще кое-что, знаете ли вы, как я могу изменить этот код, чтобы при использовании существующего файла новые данные не добавлялись в новый словарь после нового ({"old_data": "old_data"} {"new_data ":" new_data "}) Я получаю новые данные в существующих скобках ({" old_data ":" old_data "," new_data ":" new_data "})
@psm извините, только что вышел из дома, но, прочитав, может показаться, что вам придется прочитать, загрузить старый json, а затем обновить этот словарь и переписать весь файл
Это должно делать то, что вы хотите.
import csv
import json
csvfile = open('C:\\your_path\\file.csv', 'r')
jsonfile = open('C:\\your_path\\file.json', 'w')
fieldnames = ("ID","Name","Address","State")
reader = csv.DictReader(csvfile, fieldnames)
for row in reader:
json.dump(row, jsonfile)
jsonfile.write('\n')