Python 格式化csv数据并将每一行写入json
我正在尝试将csv的每一行写入json(这将被发布并循环返回,因此覆盖json文件在这里不是什么大问题)。我的代码似乎做得很好,但也需要将一些数据设置为浮点数/整数,而不是字符串 我有一种在其他地方适用的方法,但无法使两者达成一致 有人能给我指出正确的方向,在将csv数据作为json发送之前格式化它吗?下面是保留标题的代码,不过我还有一个经过调整的版本,它在csv中只有原始数据,并使用字段名作为标题Python 格式化csv数据并将每一行写入json,python,python-3.x,Python,Python 3.x,我正在尝试将csv的每一行写入json(这将被发布并循环返回,因此覆盖json文件在这里不是什么大问题)。我的代码似乎做得很好,但也需要将一些数据设置为浮点数/整数,而不是字符串 我有一种在其他地方适用的方法,但无法使两者达成一致 有人能给我指出正确的方向,在将csv数据作为json发送之前格式化它吗?下面是保留标题的代码,不过我还有一个经过调整的版本,它在csv中只有原始数据,并使用字段名作为标题 import csv import json input_file = 'Test3.csv'
import csv
import json
input_file = 'Test3.csv'
output_file_template = 'Test.json'
with open(input_file, 'r', encoding='utf8') as csvfile:
reader = csv.DictReader(csvfile, delimiter=',')
rows = list(reader)
for i in range(len(rows)):
out = json.dumps(rows[1*i:1*(i+1)])
with open(output_file_template.format(i), 'w') as f:
f.write(out)
数据的格式如下:
订单类型订单状态订单日期时间结算日期市场化订单路线
2016年11月18日执行的销售2016年11月23日1无
2016年11月18日执行的销售2016年11月23日1无
2016年11月18日执行的销售2016年11月23日1无
当第[4]行产生关键错误时。在循环中,如果float/int数据始终位于同一位置,则可以简单地强制转换值
for i, row in enumerate(rows):
row[0] = int(row[0]) # this column stores ints
row[1] = float(row[1]) # this column stores floats
out = json.dumps([row])
with open(output_file_template.format(i), 'w') as f:
f.write(out)
我不知道第0列和第1列是否包含int和float,但您可以根据需要进行更改
更新:
似乎行
是一个OrderedDict
,因此您只需要使用键而不是索引:
row['MarketId'] = int(row['MarketId'])
float和int数据总是出现在同一个地方——我刚刚尝试了你的建议,但它总是抛出关键错误。你知道从那里去哪里吗?用数据示例编辑。引起问题的列是第[4]行,尽管我尝试使用的任何列通常都会出现这种情况。打印内容如下:OrderedDict([('OrderType','Sale'),('OrderStatus','Executed'),('OrderDateTime','18/11/2016'),('SettlementDate','23/11/2016'),('MarketId','1'))