在 CENTOS 上使用 for 循环将 CSV 转换为 Json 问题

我想将 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 吗?


白猪掌柜的
浏览 206回答 2
2回答

德玛西亚99

小优化和可读性提示:尽可能避免索引选择。如果您同时迭代一个可迭代对象的索引和值,请避免使用 range(len(x)),而直接使用enumerate,在 Python 中速度更快且可读性更高。让我们假设以下输入:reader = [['1','2','3'],['11','22','33'],['111','222','333']]title = ['T1','T2','T3']改进@balderman 的回答:csv_rows = []for row in reader:  csv_rows.extend([{val: row[idx] for idx, val in enumerate(title)}])更好更清楚的是完全避免使用索引:csv_rows = []for row in reader:  csv_rows.extend([ {t_val: r_val for (t_val, r_val) in zip(title, row)} ])更紧凑(更快):[{t_val: r_val for (t_val, r_val) in zip(title, row)} for row in reader]List 和 dict-comprehensions 一开始有点棘手,但如果你把它们想象成“for 循环,for 放在后面”,它们就不那么奇怪了。

元芳怎么了

下面的代码在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'}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python