我有一个名为gett(int)的函数,它在每次调用时返回一个序列。我这样写的时候工作正常:
print gett(0)
print gett(1)
依旧......
但是当我尝试在这样的for循环中自动执行相同的操作时:
for a in range(28):
print gett(a)
它仅适用于第一个值,我得到以下输出:
[..series..]
[]
[]
[]
[]
..and all others empty
我对Python非常陌生,所以这可能很天真。任何帮助都非常感谢。谢谢。
P.S。 gett功能:
trend = file("D:\\trend.csv", "r")
def gett(pos):
t = []
for x in trend:
temp = x.split(',')
temp = temp[4:]
t.append(temp)
t = t[25:]
temp = []
for a in t:
if a[pos] != '':
temp.append(a[pos])
############
t = temp
############
return t
答案 0 :(得分:4)
在第一次迭代中,您正在完全读取文件。
在所有后续迭代中,将跳过整个for x in trend:
循环。
这样的事情怎么样:
import csv
def read_csv():
with open("D:\\trend.csv", "rb") as f:
trend = csv.reader(f, delimiter=",")
temp = [row[4:] for row in trend]
return temp[25:]
def gett(data, pos):
return [a[pos] for a in data if a[pos] != ""]
现在你可以做到
>>> mydata = read_csv()
>>> gett(mydata, 0)
[1, 2, 3, 4]
>>> gett(mydata, 1)
[5, 6, 7, 8]
答案 1 :(得分:3)
您正在打开函数定义之外的文件,然后在每次运行函数时尝试从全局文件对象中读取。在第一次运行该函数后,读指针将位于文件的末尾,您将不会读任何内容。
每次通过函数读取文件(seek
到开头如果保持全局,或者如果你把它作为本地则重新打开它)或者(几乎可以肯定,除非它是一个巨大的文件和内存)是一个问题)将整个文件读入一个列表并对该列表进行操作。
答案 2 :(得分:0)
第一次读取文件后,filePointer到达文件的末尾, 所以下次你尝试阅读文件它只是跳过它。
更好的方法是
def gett(pos , filename):
trend = file(filename, "r")
t = []
for x in trend:
temp = x.split(',')
temp = temp[4:]
t.append(temp)
t = t[25:]
temp = []
for a in t:
if a[pos] != '':
temp.append(a[pos])
############
t = temp
############
return t
您还可以尝试文件大小是否小
arr = []
for x in file("path/to/file" ,"r")
arr.append(x)
gett(pos , arr)