Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 未打开I/O文件_Python_Csv_Io - Fatal编程技术网

Python 未打开I/O文件

Python 未打开I/O文件,python,csv,io,Python,Csv,Io,我有这个csv文件dl.dropboxusercontent.com/s/tb4yc3lm3gg3j22/out.csv,我正在尝试用下面的read方法替换最后一列。 在我的input.csv中,我必须用一些计算替换最后一个字段。我尝试如下,但不知何故我得到了ValueError:对一个关闭的文件执行I/O操作。你能帮我指出错误吗。当我试图打开输入文件并将所有内容(包括新值)写入out.csv文件时,该文件最初并不存在,但应该动态构建 def read(): for file in os

我有这个csv文件dl.dropboxusercontent.com/s/tb4yc3lm3gg3j22/out.csv,我正在尝试用下面的read方法替换最后一列。 在我的input.csv中,我必须用一些计算替换最后一个字段。我尝试如下,但不知何故我得到了ValueError:对一个关闭的文件执行I/O操作。你能帮我指出错误吗。当我试图打开输入文件并将所有内容(包括新值)写入out.csv文件时,该文件最初并不存在,但应该动态构建

def read():
    for file in os.listdir("./"):
        if file.endswith('.csv'):
            fNameFull = os.path.basename(file)
            inputFileName = os.path.splitext(file)[0]
            with open(fNameFull, "rb") as infile, open('out.csv', "wb") as outfile:
                r = csv.DictReader(infile)
                w = csv.DictWriter(outfile, r.fieldnames)
                w.writeheader()
                for row in r:
                    if not row["col_last"].strip():
                        row["col_last"] = "calc_value"
                    w.writerow(row)

if __name__ == '__main__':
    main()
    read()
错误:

Traceback (most recent call last):
  File "C:\Users\hp\Desktop\final\text\finalmod.py", line 50, in <module>
    read()
  File "C:\Users\hp\Desktop\final\text\finalmod.py", line 39, in read
    w.writeheader()
  File "C:\Python27\lib\csv.py", line 137, in writeheader
    self.writerow(header)
  File "C:\Python27\lib\csv.py", line 148, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
ValueError: I/O operation on closed file
回溯(最近一次呼叫最后一次):
文件“C:\Users\hp\Desktop\final\text\finalmod.py”,第50行,在
读()
文件“C:\Users\hp\Desktop\final\text\finalmod.py”,第39行,已读
w、 写头()
文件“C:\Python27\lib\csv.py”,第137行,在writeheader中
self.writerow(标题)
文件“C:\Python27\lib\csv.py”,第148行,writerow格式
返回self.writer.writerow(self.\u dict\u to\u list(rowdict))
ValueError:对关闭的文件执行I/O操作

如果混合了制表符和空格,则可能发生这种情况。程序看起来很好,但是python认为您已经删除了。对不起,我的意思是前面的错误消失了,但是现在我又遇到了一个错误。任何建议。回溯(最近一次调用last):文件“C:\Users\hp\Desktop\final\text\finalmod.py”,第46行,在read()文件“C:\Users\hp\Desktop\final\text\finalmod.py”,第38行,在read w.writeheader()文件“C:\Python27\lib\csv.py”,第136行,在writeheader=dict(zip(self.fieldnames,self.fieldnames))中)TypeError:zip参数#1必须支持迭代@tdelaney:也有一次,当它正常运行时,它只是用替换将最后一行写入out.csv。@miku请编辑问题,以包含代码的一部分和完整的错误回溯。你检查过
r.fieldnames
给你的是什么吗?当然。我有这个csv文件,我正试图用我在上面共享的read方法替换最后一列“r9”。在tdelaney的建议后,它工作正常,但只写最后一行in out.csvm可能您仍然有选项卡在那里。。。将
打印文件len(row)
放在
w.writerow(row)
的正前方,以查看是否有大量打印。如果你的代码发生了变化,你可以在当前代码下面发布新的内容。