我想将一个csv文件转换为json文件,它可以在我的计算机上工作,但不能在我的centos服务器上工作
我计算机上的python版本是python 3.7.2,并且csv正确地在本地转换为json。
所以我尝试在Centos上更新python,我的当前版本是python 2.6.6
#Read CSV File
def read_csv(file, json_file, format):
csv_rows = []
with open(file) as csvfile:
reader = csv.DictReader(csvfile)
title = reader.fieldnames
for row in reader:
csv_rows.extend([{title[i]:row[title[i]] for i in range(len(title))}])
write_json(csv_rows, json_file, format)
我希望我的函数可以读取我的csv文件,但在适当的位置,python返回此错误:
csv_rows.extend([{title[i]:row[title[i]] for i in range(len(title))}])
^
SyntaxError: invalid syntax
很明显,此错误在我的计算机上不存在,仅在此CentOS服务器上
您认为我必须将python 2更新为python 3吗?
答案 0 :(得分:0)
下面的代码在python 3.6和2.7下进行了测试
(我相信这是您想要的)
reader = [['1','2','3'],['11','22','33'],['111','222','333']]
csv_rows = []
title = ['T1','T2','T3']
for row in reader:
csv_rows.extend([ {title[i]:row[i] for i in range(len(title))} ])
print(csv_rows)
输出
[{'T2': '2', 'T3': '3', 'T1': '1'}, {'T2': '22', 'T3': '33', 'T1': '11'}, {'T2': '222', 'T3': '333', 'T1': '111'}]
答案 1 :(得分:0)
几乎没有优化和可读性的提示:尽可能避免选择索引。
如果您要同时迭代索引和可迭代对象的值,请避免使用range(len(x)),而直接使用enumerate
,这在python中要快得多,而且可读性强。
改善@balderman的答案:
reader = [['1','2','3'],['11','22','33'],['111','222','333']]
csv_rows = []
title = ['T1','T2','T3']
for row in reader:
csv_rows.extend([{val: row[idx] for idx, val in enumerate(title)}])
print(csv_rows)
更好,更清晰的是完全避免使用索引:
reader = [['1','2','3'],['11','22','33'],['111','222','333']]
csv_rows = []
title = ['T1','T2','T3']
for row in reader:
csv_rows.extend([ {t_val: r_val for (t_val, r_val) in zip(title, row)} ])
print(csv_rows)
更加紧凑(更快):
reader = [['1','2','3'],['11','22','33'],['111','222','333']]
title = ['T1','T2','T3']
csv_rows = [{t_val: r_val for (t_val, r_val) in zip(title, row)} for row in reader]
print(csv_rows)
列表和字典理解在开始时有点棘手,但是如果您将它们视为“ for循环,for置于其后”,它们并不是那么奇怪。