Python:csv-to-json将值转换为密钥对

Python:csv-to-json将值转换为密钥对,python,json,csv,python-3.x,Python,Json,Csv,Python 3.x,去年我参加了Python初学者课程。现在我正在尝试获得一个csv到json的转换器。我已经搜索了相当长的一段时间,对我找到的一些代码进行了调整和更改,直到输出看起来与我想要的相似。我正在使用Python 3.4.2 @克沃罗比耶夫:这是我的CSV的一个摘录,但它将适用于本案例。第一次转换将起作用。第二次之后,您将看到json文件中标题的顺序将发生变化 csv文件如下所示 Document;Item;Category 4;10;C 到目前为止,我在输出文件中得到了什么(在应用了来自kvorobi

去年我参加了Python初学者课程。现在我正在尝试获得一个csv到json的转换器。我已经搜索了相当长的一段时间,对我找到的一些代码进行了调整和更改,直到输出看起来与我想要的相似。我正在使用Python 3.4.2

@克沃罗比耶夫:这是我的CSV的一个摘录,但它将适用于本案例。第一次转换将起作用。第二次之后,您将看到json文件中标题的顺序将发生变化

csv文件如下所示

Document;Item;Category
4;10;C
到目前为止,我在输出文件中得到了什么(在应用了来自kvorobiev的更改之后):

我希望在输出文件中获得的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')
导入json
导入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(打开('file.csv')中的行为1)-1
reader=csv.DictReader(csvfile,字段名)
i=0
对于读取器中的行:
i+=1
dump(行,jsonfile,缩进=4,排序键=False)
如果i
谢谢您的帮助。

更换线路

reader = csv.DictReader(csvfile, fieldnames)

此外,您还可以打开
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}')
换行

reader = csv.DictReader(csvfile, fieldnames)

此外,您还可以打开
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}')
换行

reader = csv.DictReader(csvfile, fieldnames)

此外,您还可以打开
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}')
换行

reader = csv.DictReader(csvfile, fieldnames)

此外,您还可以打开
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}')


您的输出json是否有效?你能查一下吗?谢谢Vivek。我不知道json输出是否有效,但我需要它来进一步处理数据。您输出的json有效吗?你能查一下吗?谢谢Vivek。我不知道json输出是否有效,但我需要它来进一步处理数据。您输出的json有效吗?你能查一下吗?谢谢Vivek。我不知道json输出是否有效,但我需要它来进一步处理数据。您输出的json有效吗?你能查一下吗?谢谢Vivek。我不知道json输出是否有效,但这正是我需要进一步处理数据的地方。谢谢你,你太棒了!完全解决了我的问题。@user87290您能提供您的输入文件吗?编辑标题仍然会混淆。但是我把垃圾堆修好了。输入文件是17,4MB大…我已经添加了一些解释,我原来的问题。希望这是可以理解的;)我尝试过sort_key=True,它将所有键按字母顺序排列。False什么也没做。正确的顺序应该是:文档项目类别我得到的是其他东西:项目文档类别或类别文档项目它作为特例很少工作。谢谢你,你太棒了!完全解决了我的问题。@user87290您能提供您的输入文件吗?编辑标题仍然会混淆。但是我把垃圾堆修好了。输入文件是17,4MB大…我已经添加了一些解释,我原来的问题。希望这是可以理解的;)我尝试过sort_key=True,它将所有键按字母顺序排列。False什么也没做。正确的顺序应该是:文档项目类别我得到的是其他东西:项目文档类别或类别文档项目它作为特例很少工作。谢谢你,你太棒了!完全解决了我的问题。@user87290您能提供您的输入文件吗?编辑标题仍然会混淆。但是我把垃圾堆修好了。输入文件是17,4MB大…我已经添加了一些解释,我原来的问题。希望这是可以理解的;)我尝试过sort_key=True,它将所有键按字母顺序排列。False什么也没做。正确的顺序应该是:文档项目类别我得到的是其他东西:项目文档类别或类别文档项目它作为特例很少工作。谢谢你,你太棒了!完全解决了我的问题。@user87290您能提供您的输入文件吗?编辑标题仍然会混淆。但是我把垃圾堆修好了。输入文件是17,4MB大…我已经添加了一些解释,我原来的问题。希望这是可以理解的;)我尝试过sort_key=True,它将所有键按字母顺序排列。False什么也没做。正确的顺序应该是:文档项目类别我得到的是其他东西:项目文档类别或类别文档项目它很少作为例外工作。