如何单行读取和关闭文件?

时间:2019-04-09 11:26:16

标签: python python-3.x

我使用以下代码读取列表中的文件

list = [line.rstrip('\n') for line in open(file)]

我没有手动关闭文件,因为我认为Python是使用垃圾收集器本身完成的。

当我进行测试(框架'unittest')时,它警告我文件未关闭。

  

ResourceWarning:未关闭的文件<_io.TextIOWrapper name ='test_resources / names.txt'mode ='r'encoding ='UTF-8'>     返回[line.rstrip('\ n')作为open(file)中的行]

如何单线关闭文件?

4 个答案:

答案 0 :(得分:2)

如果那样做,您将永远无法关闭该文件,因为open(file)是一个未命名的变量,在理解结束时会超出范围。正如您自己发现的那样,“一旦完成理解,垃圾收集器就会关闭文件”的假设是不正确的:GC不能确定地运行,因此您不应该依赖它来进行清理。

正确的方法是通过with语句:

with open(file) as fp:
  list = [line.rstrip('\n') for line in fp]
# file gets closed here in __exit__()

答案 1 :(得分:2)

使用pathlib

Path(file).read_text().splitlines()

使用ilio

contents = read('filename').splitlines()

答案 2 :(得分:1)

强烈推荐pathlib,有关更多信息,请访问:https://docs.python.org/3/library/pathlib.html

from pathlib import Path
ss = Path('/path/to/file').read_text().splitlines()

答案 3 :(得分:0)

单行读取和关闭文件:

with open('output.txt') as fd: list = [line.rstrip() for line in fd]

但是没有充分的理由以这种方式格式化代码。