文件打开:这算是糟糕的Python风格吗?
要读取一个文件的内容,可以使用以下代码:
data = open(filename, "r").read()
当你打开一个文件后,这个文件就不再被其他地方引用了,所以文件对象最终会关闭……而且这不会影响其他程序对这个文件的使用,因为你只是以读取的方式打开它,并没有进行写入。
补充说明:我在一个项目中遇到过这个问题,这让我去问了这个问题。文件对象只有在内存用完时才会被清理,而不是在文件句柄用完时。所以如果你频繁地这样做,可能会导致文件描述符用完,从而让你在尝试打开文件时出现错误。
6 个回答
4
你的代码确实按照你说的那样运行,但这并不是一个好的写法。你的代码依赖于一些假设,这些假设现在可能是对的,但将来不一定总是对。也就是说,代码可能会在某种情况下运行,这时候打开的文件没有关闭就会出问题。为了省下1或2行代码,真的值得冒这个风险吗?我觉得不值得。
7
确实,文件最终会被关闭,但这个“最终”可能不会很快。特别是如果你在一个循环里使用文件,系统可能会在垃圾回收(GC)处理这些文件对象之前,就用完所有的文件句柄。
30
仅供参考:
这个代码稍微长一点,但它会立即关闭文件:
from __future__ import with_statement
with open(filename, "r") as f:
data = f.read()