python关闭文件自动像上下文管理器

时间:2016-06-27 10:41:26

标签: python

如何关闭此文件或文件是否像上下文管理器with

一样自动关闭
lines = open(file_name).readlines()

我想避免使用with语句,因为上面的语句是单行,但现在我看到上面说的语句没用,因为我们无法关闭文件。

 with open(file_name)  as f:
          .....

3 个答案:

答案 0 :(得分:2)

如果您倾向于在表达式中使用open(filename)而不是with语句,请在您自己的函数中包装with语句,并在表达式中使用它。

def open_readlines_and_close(filename, *args, **kwargs):
    with open(filename, *args, **kwargs) as file:
         lines = file.readlines()
    return lines

lines = open_readlines_and_close(file_name)
# apologies for the weird function name

如果您愿意,还可以使用生成器来减少内存占用。

答案 1 :(得分:1)

lines = (lambda f=open(file_name): [f.readlines(), f.close()][0])()

然而,这不会被认为是Pythonic,因为它不太可读。

答案 2 :(得分:0)

您可以使用with

这样做的好处是文件在套件完成后正确关闭,即使在途中引发了异常。

with open(file_name, 'r') as readfile:
    lines = readfile.readlines()