Python 格式化csv数据并将每一行写入json

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'

我正在尝试将csv的每一行写入json(这将被发布并循环返回,因此覆盖json文件在这里不是什么大问题)。我的代码似乎做得很好,但也需要将一些数据设置为浮点数/整数,而不是字符串

我有一种在其他地方适用的方法,但无法使两者达成一致

有人能给我指出正确的方向,在将csv数据作为json发送之前格式化它吗?下面是保留标题的代码,不过我还有一个经过调整的版本,它在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'))