如果您要写入大量数据并且担心速度,您可能应该选择f.write(...)。我做了一个快速的速度比较,在执行大量写入时它比print(..., file=f)快得多。
import time
start = start = time.time()
with open("test.txt", 'w') as f:
for i in range(10000000):
# print('This is a speed test', file=f)
# f.write('This is a speed test\n')
end = time.time()
print(end - start)
在我的机器上,write 平均在 2.45 秒内完成,而 print 大约需要 4 倍的时间(9.76 秒)。话虽如此,在大多数现实世界的场景中,这都不是问题。
如果您选择使用print(..., file=f),您可能会发现您需要不时取消换行符,或者用其他内容替换它。这可以通过设置可选的end参数来完成,例如;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
无论您选择哪种方式,我都建议您使用with,因为它使代码更易于阅读。
更新:这种性能差异的原因是write 被高度缓冲并在实际写入磁盘之前返回(参见this answer),而print (可能)使用行缓冲。对此的一个简单测试是同时检查长写入的性能,其中行缓冲的缺点(在速度方面)不会那么明显。
start = start = time.time()
long_line = 'This is a speed test' * 100
with open("test.txt", 'w') as f:
for i in range(1000000):
# print(long_line, file=f)
# f.write(long_line + '\n')
end = time.time()
print(end - start, "s")
现在性能差异变得不那么明显了,write 的平均时间为 2.20 秒,print 的平均时间为 3.10 秒。如果您需要连接一堆字符串来获得这种长线性能会受到影响,所以print 会更有效的用例有点少见。