我很好奇。
当我们使用上下文管理器打开文件时,是在上下文管理器内部还是外部执行进一步操作更好?
with open("test.txt") as f:
data = f.read()
# 1. do sth with data here
# 2. or do sth with data here
我知道我可以访问此处和此处的数据变量,但我不知道哪个是更好的做法?是否应该尽早关闭文件以免扩展其在内存中的访问权限?
如果您在处理任何数据之前确实需要所有数据,那么请在
with
块之外进行操作;保持文件打开时间超过必要的时间没有任何好处,并且您可以通过在with
之外完成其余工作来更快地释放程序资源。
也就是说,在很多情况下,像这样的批量获取数据不是有效的解决方案;如果可以按行或按块处理文件,则在
with
块内执行此操作,因此您的程序不会在所有输入都可以放入内存的假设下运行,例如按线路:
with open("test.txt") as f:
for line in f:
# Do things with a single line
或按块:
BLOCK_SIZE = 4096
with open("test.txt") as f:
while block := f.read(BLOCK_SIZE):
# Do things with a block of BLOCK_SIZE characters