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

标签 python json csv centos

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

最佳答案

小的优化和可读性提示:尽可能避免选择索引。
如果你同时迭代一个可迭代对象的索引和值,避免使用 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 循环放在后面”,它们就不会那么奇怪了。

关于python - 在 CENTOS 上使用 for 循环将 CSV 转换为 Json 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55371991/

相关文章:

javascript - CSV 下载文件名

java - 如何使用 Java native 接口(interface)在 C++ 中导入 python 库 - Android Studio

android - 将 byteArray 转换为字符串以初始化 jsonObject

python - ValueError : not enough values to unpack (expected 11, 得到 1)

php - 在 PHP 中循环 csv - 插入和更新

json - polymer 核心 ajax 不会发布 JSON?

python - 如何使用 Matplotlib 创建折线图

python - Python中有Rake等价物吗?

python - 带有在线存储的桌面 Python 应用程序

json - 如何使用 iTunes 搜索流派