Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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文件处理中close方法的说明_Python - Fatal编程技术网

关于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

如果这听起来像是一个基本问题,我很抱歉,但我正在寻求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.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
应该可以打印文件中的第四行,而不是像工作版本那样重新打印前三行。对不起,你是对的,我的代码有点误导,在代码的第二个版本中,我本可以只放一个变量,但我只是想理解为什么当文件关闭时,我仍然可以打印任何变量,但我想我得到了我的答案,那就是变量在内存中,这是我从文件打印而不是从文件打印的地方;这就是我困惑的原因:-)非常感谢你的回答,非常感谢我的朋友,上帝保佑!