我想将一个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吗?
下面的代码在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'}]
很少的优化和可读性提示:尽可能避免索引选择。
如果你正在迭代索引和iterable的值,避免使用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循环后放置”,那么它们并不那么奇怪。