Python:csv到json的值到key pai的转换器

2024-04-26 18:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

去年我上了一门Python初学者课程。现在我正在尝试获得一个csv到json的转换器。我已经搜索了相当长的时间,调整和修改了我找到的一些代码,直到输出看起来与我想要的相似为止。我使用的是python3.4.2。在

@kvorobiev这是我的CSV的节选,但对这个案子来说就足够了。第一次转换就可以了。第二次之后,您将看到json文件中标题的顺序将发生变化。在

csv文件如下所示

Document;Item;Category
4;10;C

到目前为止,我在输出文件中得到的信息(在应用了kvorobiev的更改之后):

^{pr2}$

我要在输出文件中获取的json字符串应该如下所示:

[
{
   "Document": "4",
   "Item": "10",
   "Category": "C"
},
]

你会注意到标题的顺序不对。在

代码如下:

import json
import csv

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

jsonfile.write('[' + '\n' + ' ')
fieldnames = csvfile.readline().replace('\n','').split(';')
num_lines = sum(1 for line in open('file.csv')) -1

reader = csv.DictReader(csvfile, fieldnames)
i = 0
for row in reader:  
  i += 1
  json.dump(row, jsonfile, indent=4,sort_keys=False)
  if i < num_lines:
    jsonfile.write(',')
  jsonfile.write('\n')
jsonfile.write(' ' + ']')

print('Done')

谢谢你的帮助。在


Tags: 文件csvcsvfile代码importjson标题顺序
1条回答
网友
1楼 · 发布于 2024-04-26 18:46:58

更换管路

reader = csv.DictReader(csvfile, fieldnames)

^{pr2}$

另外,打开file1.csv,然后从file.csv获得行号

num_lines = sum(1 for line in open('file.csv')) -2

你的解决方案可以简化为

import json
import csv
csvfile = open('file1.csv', 'r')
jsonfile = open('file1.csv'.replace('.csv','.json'), 'w')
jsonfile.write('{\n[\n')
fieldnames = csvfile.readline().replace('\n','').split(';')
reader = csv.DictReader(csvfile, fieldnames, delimiter=';')
for row in reader:  
  json.dump(row, jsonfile, indent=4)
  jsonfile.write(';\n')
jsonfile.write(']\n}')

如果您想保存csv中列的顺序,可以使用

from collections import OrderedDict
...
for row in reader:  
  json.dump(OrderedDict([(f, row[f]) for f in fieldnames]), jsonfile, indent=4)
  jsonfile.write(';\n')
jsonfile.write(']\n}')

相关问题 更多 >