【问题标题】:List Comprehension Behavior with a CSV Object使用 CSV 对象列出理解行为
【发布时间】:2016-04-12 11:07:47
【问题描述】:

我正在尝试从 Python 2.6 中的 CSV 对象构造两个简单的列表。在我所有的测试中,第二个生成的列表总是返回为空(第一个生成的列表返回得很好。)就好像第二个列表理解在第一个完成之前开始。我可以让这段代码按预期运行的唯一方法是将 CSV 数据复制到它自己的列表中,然后迭代复制——这很好,但似乎效率低下。

我被难住了。

可疑代码:

import csv

data_source = '/charts.csv'
final_data = []
x_obs1 = []
y_obs1 = []
x_obs2 = []
y_obs2 = []

data_file = open(data_source, "r")
final_data = csv.reader(data_file, delimiter=',')

[(x_obs1.append(item[0]), y_obs1.append(item[1])) for item in final_data]
[(x_obs2.append(item[0]), y_obs2.append(item[2])) for item in final_data]

data_file.close()

print y_obs2

返回:[]

这按预期工作:

import csv

data_source = '/charts.csv'
final_data = []
x_obs1 = []
y_obs1 = []
x_obs2 = []
y_obs2 = []

data_file = open(data_source, "r")
csv_data = csv.reader(data_file, delimiter=',')

[final_data.append(item) for item in csv_data]

data_file.close()

[(x_obs1.append(item[0]), y_obs1.append(item[1])) for item in final_data]
[(x_obs2.append(item[0]), y_obs2.append(item[2])) for item in final_data]

print y_obs2

返回:['Barometric Pressure Normal', '30', '30', '30', '30', '30'....

我错过了什么?任何见解将不胜感激。

【问题讨论】:

    标签: python csv list-comprehension python-2.6


    【解决方案1】:

    基本上,csv.reader 仅适用于浏览 csv 文件。第二次尝试迭代同一个csv.reader,它已经用完了,所以返回一个空列表。

    所以你的第二种情况是做你需要的更正确的方法。它创建了 CSV 数据的缓存副本,而无需返回磁盘上的文件(这相对昂贵)。

    【讨论】:

    • 美丽。我不知道 csv.reader 对象一次就够用了,而且会筋疲力尽。你昨天在哪里?非常感谢!
    • 不客气!我花了很多时间在类似的问题上摸不着头脑,很高兴能提供帮助;)
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多