【问题标题】:Python: file object as function argumentPython:文件对象作为函数参数
【发布时间】:2014-10-21 16:08:41
【问题描述】:

我在一个模块中编写了一个函数 (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

如果我在函数内打开文件,它可以正常工作,但是当我想更改输入文件时它会慢得多。谁能解释一下?

【问题讨论】:

    标签: python file function argument-passing


    【解决方案1】:

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

    从中读取时
    sum(1 for line in data)
    

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

    再次读取时
    for line in data:
    

    您没有得到任何数据,因为您已经读取了文件中的所有内容。要修复,您必须在计算行数后重置文件指针

    data.seek(0)
    

    【讨论】:

    • 谢谢,这解决了我的问题。抱歉,我将在我的问题中用“文件对象”更改“文件名”
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2014-06-28
    • 2011-06-23
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多