0

我正在尝试为我之前提到的一项任务创建一个函数,用于向存储在一个文件夹中的某些文件添加一个新字段。我阅读了 Python 中的函数方法并遵循但它不起作用。如果有人可以指导我,我会很高兴。

def newfield(infile,outfile):
    infile.readlines()
    outfile = ["%s\t%s" %(item.strip(),2) for item in infile]
    outfile.write("\n".join(output))
    outfile.close()
    return outfile

然后我尝试调用它:

a = open("E:/SAGA/data/2006last/test/325145404.all","r")
b = open("E:/SAGA/data/2006last/test/325145404_edit.all","w")
newfield(a,b)

此外,当我们创建一个函数时,我们应该在同一个 python shell 中调用它还是可以将它作为一个文件然后调用它?

4

2 回答 2

1

看起来问题是您将构建的列表分配给与output文件相同的名称。您还从文件中读取了所有行,并且没有在任何地方分配结果,因此当您的列表理解迭代它时,它已经在文件的末尾。所以你可以放弃这readlines条线。

def newfield(infile,outfile):
    output = ["%s\t%s" %(item.strip(),2) for item in infile]
    outfile.write("\n".join(output))
    outfile.close()
    return outfile
于 2013-04-03T11:39:11.517 回答
0

该行infile.readlines()消耗整个输入文件。所有行都被读取和遗忘,因为它们没有分配给变量。

该构造["%s\t%s" %(item.strip(),2) for item in infile]是一个列表推导。此表达式返回一个列表。通过将其分配给变量 outfile,outfile 的旧值(可能是文件对象)被遗忘并由列表推导返回的列表替换。此列表对象没有写入方法。通过将列表分配给另一个变量,可以保留 outfile 中的文件对象。

尝试这个:

def newfield(infile,outfile):
    items = ["%s\t%s" %(item.strip(),2) for item in infile]
    outfile.write("\n".join(items))
    outfile.close()
    return outfile
于 2013-04-03T11:38:00.973 回答