Python I/O 操作一个关闭的文件,为什么会报错?下面的代码
Python I/O operation on a closed file, why the error? Code below
我有以下代码,但出现错误:I/O 尽管已打开文件,但仍对已关闭的文件进行操作。
我正在创建一个 .txt 文件并将字典的值写入 .txt 文件,然后关闭该文件。
之后,我尝试为创建的文件打印 SHA256 摘要。
sys.stdout = open('answers.txt', 'w')
for key in dictionary:
print(dictionary[key])
sys.stdout.close()
f = open('answers.txt', 'r+')
#print(hashlib.sha256(f.encode('utf-8')).hexdigest())
m = hashlib.sha256()
m.update(f.read().encode('utf-8'))
print(m.hexdigest())
f.close()
为什么会出现此错误?
Traceback (most recent call last):
File "filefinder.py", line 97, in <module>
main()
File "filefinder.py", line 92, in main
print(m.hexdigest())
ValueError: I/O operation on closed file.
在这里,您覆盖 sys.stdout
以指向您打开的文件:
sys.stdout = open('answers.txt', 'w')
稍后,当您尝试打印到 STDOUT
时,sys.stdout
仍指向(现已关闭)answers.txt
文件:
print(m.hexdigest())
我看不出有任何理由在这里覆盖 sys.stdout
。相反,只需将 file
选项传递给 print()
:
answers = open('answers.txt', 'w')
for key in dictionary:
print(dictionary[key], file=answers)
answers.close()
或者,使用自动关闭文件的with
语法:
with open('answers.txt', 'w') as answers:
for key in dictionary:
print(dictionary[key], file=answers)
您已经用文件句柄覆盖 sys.stdout
。一旦你关闭它,你就可以再写了。由于 print()
尝试写入 sys.stdout
,它将失败。
您应该尝试以不同的模式打开文件(例如w+
),使用StringIO
或复制原始文件sys.stdout
并稍后恢复。
我有以下代码,但出现错误:I/O 尽管已打开文件,但仍对已关闭的文件进行操作。
我正在创建一个 .txt 文件并将字典的值写入 .txt 文件,然后关闭该文件。
之后,我尝试为创建的文件打印 SHA256 摘要。
sys.stdout = open('answers.txt', 'w')
for key in dictionary:
print(dictionary[key])
sys.stdout.close()
f = open('answers.txt', 'r+')
#print(hashlib.sha256(f.encode('utf-8')).hexdigest())
m = hashlib.sha256()
m.update(f.read().encode('utf-8'))
print(m.hexdigest())
f.close()
为什么会出现此错误?
Traceback (most recent call last):
File "filefinder.py", line 97, in <module>
main()
File "filefinder.py", line 92, in main
print(m.hexdigest())
ValueError: I/O operation on closed file.
在这里,您覆盖 sys.stdout
以指向您打开的文件:
sys.stdout = open('answers.txt', 'w')
稍后,当您尝试打印到 STDOUT
时,sys.stdout
仍指向(现已关闭)answers.txt
文件:
print(m.hexdigest())
我看不出有任何理由在这里覆盖 sys.stdout
。相反,只需将 file
选项传递给 print()
:
answers = open('answers.txt', 'w')
for key in dictionary:
print(dictionary[key], file=answers)
answers.close()
或者,使用自动关闭文件的with
语法:
with open('answers.txt', 'w') as answers:
for key in dictionary:
print(dictionary[key], file=answers)
您已经用文件句柄覆盖 sys.stdout
。一旦你关闭它,你就可以再写了。由于 print()
尝试写入 sys.stdout
,它将失败。
您应该尝试以不同的模式打开文件(例如w+
),使用StringIO
或复制原始文件sys.stdout
并稍后恢复。