csv ValueError:关闭文件上的I/O操作

beq87vna  于 12个月前  发布在  其他
关注(0)|答案(7)|浏览(76)
import csv    

with open('v.csv', 'w') as csvfile:
    cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for w, c in p.items():
    cwriter.writerow(w + c)

这里,p是字典,wc都是字符串。
当我尝试写入文件时,它会报告错误:

ValueError: I/O operation on closed file.
j1dl9f46

j1dl9f461#

缩进正确;你的for语句应该在with块中:

import csv    

with open('v.csv', 'w') as csvfile:
    cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)

    for w, c in p.items():
        cwriter.writerow(w + c)

with块之外,文件被关闭。

>>> with open('/tmp/1', 'w') as f:
...     print(f.closed)
... 
False
>>> print(f.closed)
True
5cg8jx4n

5cg8jx4n2#

相同错误可以通过混合引发:制表符+空格。

with open('/foo', 'w') as f:
 (spaces OR  tab) print f       <-- success
 (spaces AND tab) print f       <-- fail
mspsb9vt

mspsb9vt3#

”““我也有同样的问题。这是我以前的代码**

csvUsers = open('/content/gdrive/MyDrive/Ada/Users.csv', 'a', newline='', encoding='utf8')
usersWriter = csv.writer(csvUsers)
for t in users:
    NodeWriter=.writerow(users)
csvUsers.close()

显然,我应该编写usersWriter而不是NodeWriter。

NodeWriter=.writerow(users)
usersWriter=.writerow(users)

下面是我目前的代码,它正在工作

csvUsers = open('/content/gdrive/MyDrive/Ada/Users.csv', 'a', newline='', encoding='utf8')
usersWriter = csv.writer(csvUsers)
for t in users:
    usersWriter=.writerow(users)
csvUsers.close()
pwuypxnk

pwuypxnk4#

file = open("filename.txt", newline='')
for row in self.data:
    print(row)

将数据保存到一个变量(file)中,因此需要一个with

3zwtqj6y

3zwtqj6y5#

当我在with open(...) as f:中使用未定义的变量时,我遇到了这个问题。我删除了(或在外部定义了)未定义的变量,问题就消失了。

ztyzrc3y

ztyzrc3y6#

另一个可能的原因是,在一轮copypasta之后,您最终阅读两个文件,并将相同的名称分配给两个文件句柄,如下所示。注意嵌套的with open语句。

with open(file1, "a+") as f:
    # something...
    with open(file2, "a+", f):
        # now file2's handle is called f!

    # attempting to write to file1
    f.write("blah") # error!!

修复方法是为两个文件句柄分配不同的变量名,例如。f1f2,而不是f

ylamdve6

ylamdve67#

在使用auto-py-to-exe编译程序后,我遇到了类似的问题。
我使用with open(link, "rb") as f:,但切换到PdfReader方法修复了它。
只是想分享一下以防其他人也面临这种情况。

# it diesn't work --> ValueError: I/O operation on closed file.
     for link in links:
                if os.path.isfile(link):
                    with open(link, "rb") as f:
                    pdf_reader = PyPDF2.PdfReader(f)
            pdf_exporter.write("C:\\Temp\\test.pdf")
            os.startfile("C:\\Temp\\test.pdf")

# it does
     for link in links:
                if os.path.isfile(link):
                    # with open(link, "rb") as f:
                    # pdf_reader = PyPDF2.PdfReader(f)
                    pdf_reader = PyPDF2.PdfReader(link)
            pdf_exporter.write("C:\\Temp\\test.pdf")
            os.startfile("C:\\Temp\\test.pdf")

相关问题