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)
谢谢,这解决了我的问题。对不起,我会在我的问题中将“文件名”改为“文件对象”