Python 3。文件状态为打开或关闭
开始学习Python!终于 所涉行:Python 3。文件状态为打开或关闭,python,Python,开始学习Python!终于 所涉行: readMyFile=open("myFile.txt","r").read() 上面的行将txt文件读入变量readMyFile。我需要知道的是: 如何获取myFile.txt文件的状态(如果打开或关闭)?如果它是打开的,如何关闭它?我知道如何关闭它,以防发生以下情况: readMyFile=open("myFile.txt","r") readMyFile.close 但在上述情况下,变量包含来自文件的文本,而不是文件对象 提前谢谢 写这篇文章时:
readMyFile=open("myFile.txt","r").read()
上面的行将txt文件读入变量readMyFile。我需要知道的是:
如何获取myFile.txt文件的状态(如果打开或关闭)?如果它是打开的,如何关闭它?我知道如何关闭它,以防发生以下情况:
readMyFile=open("myFile.txt","r")
readMyFile.close
但在上述情况下,变量包含来自文件的文本,而不是文件对象
提前谢谢 写这篇文章时:
readMyFile=open("myFile.txt","r").read()
…无法获取文件的状态、关闭文件或其他任何操作。您没有存储它,因此无法访问它。没有什么魔法可以让你找回你扔掉的信息(否则,扔掉信息就没有意义了,垃圾收集之类的事情也不可能奏效)
解决方案是不要这样做:任何您想要使用的值,将其存储在变量中(或列表或dict成员,或实例的属性,或仅存储在某处的任何内容),然后(正如您从问题中已经知道的那样),您可以使用它:
>>> myfile = open("myFile.txt","r")
>>> readMyFile = myFile.read()
>>> myFile.closed
False
>>> myFile.close()
>>> myFile.closed
True
虽然在这种情况下,有一个更好的答案:
>>> with open("myFile.txt", "r") as myFile:
... readMyFile = myFile.read()
现在,myFile
会在with
语句的末尾自动关闭,因此您无需担心它
或者,更好的是,您可以将其包装到函数中:
>>> def readfile(name):
... with open(name) as myFile:
... return myFile.read()
>>> readMyFile = readfile("myFile.txt")
…除了readfile
中的两行代码之外,您的代码甚至都不需要考虑文件对象
在评论中,你问: readMyFile=open(“myFile.txt”,“r”).read()在这方面等于“with”解决方案,在这两种情况下,文件都将被关闭并丢弃 不,它们不是等价物
- 第一个版本丢弃了对file对象的引用,因此该文件现在是垃圾文件,但是您要让Python来确定它是垃圾文件,并在它发现并找到它时为您清理它(关闭该文件)
版本告诉Python在with
语句完成后立即清理with
with
语句所解决的问题:通过一个简单的缩进告诉Python您需要值生存多久,并且它确保值在最后被清除。当您编写此语句时:
readMyFile=open("myFile.txt","r").read()
…无法获取文件的状态、关闭文件或其他任何操作。您没有存储它,因此无法访问它。没有什么魔法可以让你找回你扔掉的信息(否则,扔掉信息就没有意义了,垃圾收集之类的事情也不可能奏效)
解决方案是不要这样做:任何您想要使用的值,将其存储在变量中(或列表或dict成员,或实例的属性,或仅存储在某处的任何内容),然后(正如您从问题中已经知道的那样),您可以使用它:
>>> myfile = open("myFile.txt","r")
>>> readMyFile = myFile.read()
>>> myFile.closed
False
>>> myFile.close()
>>> myFile.closed
True
虽然在这种情况下,有一个更好的答案:
>>> with open("myFile.txt", "r") as myFile:
... readMyFile = myFile.read()
现在,myFile
会在with
语句的末尾自动关闭,因此您无需担心它
或者,更好的是,您可以将其包装到函数中:
>>> def readfile(name):
... with open(name) as myFile:
... return myFile.read()
>>> readMyFile = readfile("myFile.txt")
…除了readfile
中的两行代码之外,您的代码甚至都不需要考虑文件对象
在评论中,你问: readMyFile=open(“myFile.txt”,“r”).read()在这方面等于“with”解决方案,在这两种情况下,文件都将被关闭并丢弃 不,它们不是等价物
- 第一个版本丢弃了对file对象的引用,因此该文件现在是垃圾文件,但是您要让Python来确定它是垃圾文件,并在它发现并找到它时为您清理它(关闭该文件)
版本告诉Python在with
语句完成后立即清理with
with
语句所解决的问题:只需一个简单的缩进,您就可以告诉Python您需要值生存多长时间,并且它确保值在最后被清除。尝试:
with open("myFile.txt","r") as fd:
readMyFile = fd.read()
在这里,您无需担心关闭文件。有时,打开过多文件而不关闭可能会导致一些问题。使用with语句Python将在with块后自动关闭文件 试试看:
with open("myFile.txt","r") as fd:
readMyFile = fd.read()
在这里,您无需担心关闭文件。有时打开和删除的文件太多