开始学习Python!终于!
相关行:
readMyFile=open("myFile.txt","r").read()
上面的行将txt文件读入变量readMyFile。我需要知道的:
如何获取myFile.txt文件的状态(如果文件处于打开或关闭状态)?以及如何将其关闭(如果打开)?我知道如何关闭它,以防万一:
readMyFile=open("myFile.txt","r")
readMyFile.close
但在上述情况下,变量包含文件中的文本,而不是文件对象。
谢谢!
答案 0 :(得分:2)
当您写这篇文章时:
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'解决方案,在两种情况下文件都将被关闭并丢弃?
不,它们不是等效的。
第一个版本会丢弃对文件对象的引用,因此该文件现在是垃圾文件-但您将其留给Python来确定它是垃圾文件并清理(这将关闭文件)随时随地为您服务。
with
版本告诉Python在with
语句完成后立即进行清理。
碰巧的是,在这个特定示例中,使用CPython(如果您不知道使用的是哪个Python实现),Python会发现该值是垃圾,然后关闭文件,在语句的末尾,所以没有区别。
但是在稍微不同的情况下并非如此。在不了解CPython工作原理的内部的情况下,您实际上无法知道在哪种情况下是正确的。即使在这种情况下,如果您在PyPy而不是CPython中运行相同的代码,它也会执行不同的操作。这就是为什么许多过去神秘地使用Python程序有时无法写入文本文件的最后300个字节的原因,或者Python Web服务器有时会因文件句柄用尽而失败,依此类推-正是{{1} }语句解决了:您通过简单的缩进告诉Python您需要多长时间才能保留该值,并确保最后清除该值。
答案 1 :(得分:1)
尝试:
with open("myFile.txt","r") as fd:
readMyFile = fd.read()
这里您不必担心关闭文件。有时,打开过多且未关闭的文件会导致某些问题。使用with语句Python将在with块之后自动关闭文件。