我正在尝试将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)
数据的格式如下:
OrderType OrderStatus OrderDateTime SettlementDate MarketId OrderRoute
促销销售18/11/2016 23/11/2016 1无
促销销售18/11/2016 23/11/2016 1无
促销销售18/11/2016 23/11/2016 1无
行[4]产生键错误。
答案 0 :(得分:2)
在循环中,如果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列是否包含整数和浮点数,但您可以根据需要进行更改。
row
似乎是OrderedDict
,因此您只需要使用密钥而不是索引:
row['MarketId'] = int(row['MarketId'])