关于Python文件处理中close方法的说明
如果这听起来像是一个基本问题,我很抱歉,但我正在寻求python中close方法的澄清,我不明白为什么在关闭文件后,我仍然可以打印指向该文件的变量 如果我运行以下命令:关于Python文件处理中close方法的说明,python,Python,如果这听起来像是一个基本问题,我很抱歉,但我正在寻求python中close方法的澄清,我不明白为什么在关闭文件后,我仍然可以打印指向该文件的变量 如果我运行以下命令: poem1 = open('poem1.txt', 'r') poem_line1 = poem1.readline() poem_line2 = poem1.readline() poem_line3 = poem1.readline() print(poem_line1 + poem_line2 + poem_line3
poem1 = open('poem1.txt', 'r')
poem_line1 = poem1.readline()
poem_line2 = poem1.readline()
poem_line3 = poem1.readline()
print(poem_line1 + poem_line2 + poem_line3)
poem1.close()
print(poem1.readline())
我会得到正确的信息:
“ValueError:对关闭的文件执行I/O操作。”
但如果我替换直接打印文件的最后一行,则不会出现错误:
poem_line1 = poem1.readline()
poem_line2 = poem1.readline()
poem_line3 = poem1.readline()
print(poem_line1 + poem_line2 + poem_line3)
poem1.close()
print (poem_line1 + poem_line2 + poem_line3)
方法close()
关闭打开的文件。无法再读取或写入已关闭的文件
任何需要打开文件的操作都会在文件关闭后引发
ValueError
。当文件的引用对象被重新分配给另一个文件时,Python会自动关闭文件。最好使用close()
方法关闭文件。关闭文件后,您将无法打印这些文件,因为它们未打开。编译器将找不到任何内容。行poem\u line1=poem1.readline()
从文件中读取一行,并将其作为字符串放入变量中。因此,在这之后,该行将被复制到内存中。这就是为什么关闭文件后仍然可以使用此变量的原因
因此,使用行
print(poem\u line1+poem\u line2+poem\u line3)
您不是从文件打印,而是从变量(从内存)打印字符串 这并不能完全回答这个问题。此外,最后一行有点误导。您希望代码的第一个版本做什么?当然,再次调用readline
应该可以打印文件中的第四行,而不是像工作版本那样重新打印前三行。对不起,你是对的,我的代码有点误导,在代码的第二个版本中,我本可以只放一个变量,但我只是想理解为什么当文件关闭时,我仍然可以打印任何变量,但我想我得到了我的答案,那就是变量在内存中,这是我从文件打印而不是从文件打印的地方;这就是我困惑的原因:-)非常感谢你的回答,非常感谢我的朋友,上帝保佑!