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

Python:作为函数参数的文件对象,python,file,function,argument-passing,Python,File,Function,Argument Passing,我已经在我想在主脚本中导入的模块中编写了一个函数(read()):这个函数只是读取一个带有正则表达式的文件,并从中创建一个数组 此函数的唯一参数是它必须读取的文件(.txt,仅数字)。 我想在我的主脚本data=open('output99.txt','r')中打开文件,给文件提供对象data,然后将文件对象data传递给函数,这样我可以随时更改输入文件。这会有问题吗? 因为如果我这样做,函数将不工作,并返回一个空数组: def read(data): n_lines = sum(1 for

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

如果我在函数中打开该文件,它会正常工作,但当我想要更改输入文件时,速度会慢得多。谁能解释一下吗?

数据
不是文件名;它是一个
文件
对象。当你使用

sum(1 for line in data)
读取文件的全部内容,使文件指针位于文件末尾。当你试图再次阅读时

for line in data:
您没有得到任何数据,因为您已经读取了文件中的所有内容。要修复此问题,您必须在使用

data.seek(0)

谢谢,这解决了我的问题。对不起,我会在我的问题中将“文件名”改为“文件对象”