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

时间:2017-10-16 12:55:58

标签: python python-3.x

我正在尝试将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]产生键错误。

1 个答案:

答案 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'])
相关问题