在Python中为add\u new\u字段创建一个函数

2024-05-12 20:42:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为前面提到的任务创建一个函数,用于将新字段添加到存储在一个文件夹中的某些文件中。我阅读了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中调用它,还是可以将它作为一个文件来调用它?你知道吗


Tags: 文件方法函数test文件夹dataopenall
2条回答

问题似乎是您将生成的列表分配给与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

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

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

试试这个:

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

相关问题 更多 >