尝试迭代文件名列表时出现Python错误

时间:2015-03-06 18:33:02

标签: python csv python-3.x

我有一个文件名列表,所有文件名都以.csv结尾。我正在尝试使用linecache.getline函数来获取每个csv的2个部分 - 第二行,第5行和第46行,第5个项目并比较这两个值(它们是股票回报)。

import csv
import linecache

d = open('successful_scrapes.csv')
csv = csv.reader(d)

k = []

for row in csv:
    k.append(row)

x =linecache.getline('^N225.csv',2)
y = float(x.split(",")[4])

for c in k:
    g = linecache.getline(c,2)
    t = float(g.split(",")[4])

一切正常,直到k列表上的for循环。它不断返回错误“Unhashable type:list”。我已经尝试在列表中的每个.csv文件名之前和之后加上引号。此外,所有文件都包含在同一目录中。有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以读取该文件,然后根据行号将值附加到列表中。

import csv
with open("C/a.csv", "rb") as f:
    reader = csv.reader(f)
    lst = [x[4] for i, x in enumerate(reader) if i == 1 or i == 45]

然后,您可以与lst项目

进行比较

答案 1 :(得分:0)

您滥用linecache,这是用于处理文件。如果要将整个文件首先存入内存,那么根本不使用它。

在这种情况下,由于您将整个CSV复制到k,只需进行比较:

yourComparisonFunction(k[1][4],k[45][4])

或者,您可以使用linecache代替csv,并执行以下操作:

import linecache

file_list = ['file1','file2','file3','etc']

for f in file_list:

    line2 = linecache.getline(f,2)
    line2val = float(line2.split(",")[4])
    line46 = linecache.getline(f,46)
    line46val = float(line46.split(",")[4])

我认为,添加一些比较逻辑。