所以我想用os.walk()搜索文件名,并将结果列表名称写入文件。我想知道哪些更有效:打开文件,然后在找到它们时写出每个结果,或者将所有内容存储在列表中,然后编写整个列表。那个列表可能很大,所以我想知道第二个解决方案是否有用。
答案 0 :(得分:2)
见这个例子:
import os
fil = open('/tmp/stuff', 'w')
fil.write('aaa')
os.system('cat /tmp/stuff')
你可能希望看到aaa
,但你什么也得不到。这是因为Python有一个内部缓冲区。写入磁盘是昂贵的,因为它必须:
如果你想写任何小东西,它可能会累积很长一段时间。相反,Python所做的是保持缓冲区,并且只有实际不时写入。您不必担心内存增长,因为它将保持在较低的值。来自docs:
“0表示无缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值,通常为tty设备进行行缓冲并完全缓冲其他文件。如果省略,则使用系统默认值。“
完成后,请确保在执行过程中的任何时候执行fil.close()
或fil.flush()
,或使用关键字buffering=0
禁用缓冲。
另一件需要考虑的事情是,如果由于某种原因,程序在流程中间退出,会发生什么。如果将所有内容存储在内存中,它将会丢失。你在磁盘上有什么,将保留在那里(但除非你冲洗,否则无法保证实际保存了多少)。