Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中为add_new_字段创建一个函数_Python_Python 2.7 - Fatal编程技术网

在Python中为add_new_字段创建一个函数

在Python中为add_new_字段创建一个函数,python,python-2.7,Python,Python 2.7,我正在尝试为我前面提到的任务创建一个函数,用于向存储在一个文件夹中的某些文件添加一个新字段。我阅读了Python中的函数方法,并遵循了它,但它不起作用。如果有人能指导我,我会很高兴的 def newfield(infile,outfile): infile.readlines() outfile = ["%s\t%s" %(item.strip(),2) for item in infile] outfile.write("\n".join(output)) ou

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

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

infle中项的构造
[%s\t%s”%(item.strip(),2)
是一个列表。此表达式返回一个列表。通过将其分配给变量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

问题似乎是您正在将生成的列表分配给与
输出文件同名的文件。您还读取了文件中的所有行,并且没有将结果分配到任何位置,因此当您的列表理解对其进行迭代时,它已经位于文件的末尾。因此,您可以删除
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

什么不起作用?你期望得到什么样的结果,你发现了什么样的结果?您的输入是什么样子的?它给出了以下错误:回溯(最近一次调用last):文件“”,第1行,在newfield(a,b)中;文件“”,第4行,在newfield outfile.write(“\n”.join(output))AttributeError:“list”对象没有属性“write”,我尝试了您的建议。当我把这个函数调用为:a=open(“E:/SAGA/data/2006last/test/325155405.all”,“r”)b=open(“E:/SAGA/data/2006last/test/325155405_edit.all”,“w”)newfield(a,b);它不会创建新的出料口。是否有错误?更新代码后是否启动了新的python提示符?是的,错误是:回溯(最近一次调用):文件“”,第1行,在newfield(a,b)中;文件“”,第3行,在newfield outfile.write(“\n”.join(output))AttributeError:“list”对象没有属性“write”,可能我的问题是如何调用它。我在PythonGUI中编写了这个函数,随后在同一页中调用了它,对吗?这个错误看起来是来自您发布的原始代码,而不是上面我尝试过您建议的代码。当我把这个函数调用为:a=open(“E:/SAGA/data/2006last/test/325155405.all”,“r”)b=open(“E:/SAGA/data/2006last/test/325155405_edit.all”,“w”)newfield(a,b);它给出了这样一个错误:对不起,请你再解释一下你到底是什么意思?我不明白你的意思。谢谢你的帮助。我尝试了你推荐的新代码。当我调用时,我收到这个错误:你认为它指的是什么?调用函数后是否使用返回的文件?这个错误是什么意思?文件“”,第3行,位于newfield1 outfile.write(“\n”.join(items))值错误:对关闭的文件执行I/O操作