使用 CSV 对象列出理解行为
List Comprehension Behavior with a CSV Object
我正在尝试从 Python 2.6 中的 CSV 对象构造两个简单列表。在我所有的测试中,第二个生成的列表总是 returns 为空(第一个生成的列表 returns 很好。)这几乎就像第二个列表理解在第一个列表完成之前开始。我可以按预期将此代码设为 运行 的唯一方法是将 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
Returns: []
这按预期工作:
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
Returns: ['Barometric Pressure Normal', '30', '30', '30', '30', '30'....
我错过了什么?任何见解将不胜感激。
基本上,csv.reader
仅适用于一次浏览 csv 文件。第二次尝试迭代相同的 csv.reader
,它已经用完了,所以 returns 一个空列表。
所以你的第二种情况是做你需要的更正确的方法。它创建 CSV 数据的缓存副本,而无需返回磁盘上的文件(这相对昂贵)。
我正在尝试从 Python 2.6 中的 CSV 对象构造两个简单列表。在我所有的测试中,第二个生成的列表总是 returns 为空(第一个生成的列表 returns 很好。)这几乎就像第二个列表理解在第一个列表完成之前开始。我可以按预期将此代码设为 运行 的唯一方法是将 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
Returns: []
这按预期工作:
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
Returns: ['Barometric Pressure Normal', '30', '30', '30', '30', '30'....
我错过了什么?任何见解将不胜感激。
基本上,csv.reader
仅适用于一次浏览 csv 文件。第二次尝试迭代相同的 csv.reader
,它已经用完了,所以 returns 一个空列表。
所以你的第二种情况是做你需要的更正确的方法。它创建 CSV 数据的缓存副本,而无需返回磁盘上的文件(这相对昂贵)。