python3怎样打开文件_Python 3。文件状态打开或关闭

当你写这篇文章时:readMyFile=open("myFile.txt","r").read()

…您无法获取文件的状态,或将其关闭,或其他任何操作。你没有存储它,所以你无法访问它。没有什么魔力可以让你找回你丢弃的信息(否则,扔掉信息就没有意义了,垃圾回收之类的东西也不可能起作用)。在

解决方法是不要这样做:任何你想使用的值,把它存储在变量(或者一个列表或dict成员,或者一个实例的属性,或者任何只将它存储在某个地方的东西),然后(正如你从问题中已经知道的那样),你可以使用它:

^{pr2}$

尽管在这种情况下,还有一个更好的答案:>>> 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() is equal to 'with' solution in regard, that in both cases file will be closed and throwed away?

不,它们不是等价的。在第一个版本放弃了对file对象的引用,因此文件现在是垃圾文件,但是您将它留给Python来确定它是垃圾,并在它发现并找到它时为您清理(关闭文件)。

with版本告诉Python在with语句完成后立即清理。

碰巧,在这个特定的例子中,对于CPython(如果您不知道使用的是哪一个,您可能正在使用的Python实现),Python会发现该值是垃圾,并在语句末尾关闭该文件,因此没有区别。在

但在稍有不同的情况下,情况并非如此。如果不了解CPython是如何工作的,就无法真正知道在哪些情况下是正确的。即使这样,如果你在PyPy而不是CPython中运行相同的代码,它也会做一些不同的事情。这就是为什么许多Python程序过去常常神秘地有时无法写入文本文件的最后300个字节,或者Python web服务器偶尔会因为文件句柄用完而失败,等等,这正是with语句解决的问题:您只需简单的缩进就可以告诉Python您需要值生存多久,然后它就可以了确保值在末尾被清除。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值