我使用以下代码读取列表中的文件
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)中的行]
如何单线关闭文件?
答案 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)
答案 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]
但是没有充分的理由以这种方式格式化代码。