Python:文件对象作为函数参数

时间:2014-10-21 16:08:42

标签: python file function argument-passing

我在我想要在我的主脚本中导入的模块中编写了一个函数(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

如果我打开函数内部的文件,它可以正常工作,但是当我想要更改输入文件时,它会快得多。任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

data不是文件名;它是一个file对象。当您使用

读取它时
sum(1 for line in data)

您读取了文件的全部内容,以便文件指针位于文件的末尾。当您尝试使用

再次阅读时
for line in data:

你没有数据,因为你已经阅读了文件中的所有内容。要修复,在使用

计算行数后,必须重置文件指针
data.seek(0)