我有一个文件名列表,所有文件名都以.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文件名之前和之后加上引号。此外,所有文件都包含在同一目录中。有什么想法吗?
谢谢!
答案 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])
我认为,添加一些比较逻辑。