我在我想要在我的主脚本中导入的模块中编写了一个函数(read()
):这个函数只是用正则表达式读取一个文件并从中创建一个数组。
此函数采用的唯一参数是必须读取的文件(.txt,仅限数字)。
我想在我的主脚本data = open('output99.txt', 'r')
中打开文件,为文件提供对象data
,然后将文件对象data
传递给函数,这样我就可以随时更改输入文件我想..可能是个问题吗?
因为如果我这样做,该函数不起作用,并返回一个空数组:
def read(data):
n_lines = sum(1 for line in data)
array = np.empty((n_lines,13))
re_re = re.compile('^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)')
i=0
for line in data:
reg = re_re.search(line)
if(re!=None):
array[i,0] = reg.group(1)
array[i,1] = reg.group(2)
array[i,2] = reg.group(3)
array[i,3] = reg.group(4)
array[i,4] = reg.group(5)
array[i,5] = reg.group(6)
array[i,6] = reg.group(7)
array[i,7] = reg.group(8)
array[i,8] = reg.group(9)
array[i,9] = reg.group(10)
array[i,10] = reg.group(11)
array[i,11] = reg.group(12)
array[i,12] = reg.group(13)
i+=1
return array
如果我打开函数内部的文件,它可以正常工作,但是当我想要更改输入文件时,它会快得多。任何人都可以解释一下吗?
答案 0 :(得分:1)
data
不是文件名;它是一个file
对象。当您使用
sum(1 for line in data)
您读取了文件的全部内容,以便文件指针位于文件的末尾。当您尝试使用
再次阅读时for line in data:
你没有数据,因为你已经阅读了文件中的所有内容。要修复,在使用
计算行数后,必须重置文件指针data.seek(0)