我正在处理一个文本文件。我先阅读它,然后执行一些操作,然后将其写入。
这里实际上没有问题,但是我对性能感到好奇。
我可以这样做:
start = end = 0
with open('test.txt', 'r') as file:
text = file.read()
'''
A bunch of code.
For example, working with "text" and getting "start" and "end"
'''
with open('test.txt', 'a') as file:
file.write(text[start:end])
或者我可以这样做:
start = end = 0
with open('test.txt', 'r+') as file:
text = file.read()
'''
The exact same bunch of code. But the file is opened, that's what concerns me.
'''
file.write(text[start:end])
哪种方式在性能上更好?
答案 0 :(得分:2)
这将在很大程度上取决于操作系统和文件系统。我猜测,r+
选项将(略微)更快,因为它避免了创建额外的文件句柄,但是操作系统级别的缓存可以轻松地消除差异。
但是,面对其他所有问题,任何差异都将变得很小,以至于无所谓。无论如何,I / O都很慢。在I / O时序的正常变化中,要再创建一个文件对象不会增加成本。
请注意,当您使用r
/ a
模式时,在大多数平台上,为添加而打开的文件在结束之前都被明确禁止覆盖数据。这样可以保护您免受错误搜索的影响,而错误最终会覆盖错误的部分。
答案 1 :(得分:0)
这取决于您对文件的处理方式,因为您需要读写指定的文件,因此建议您使用r+
。 (r+
同时具有读取模式和写入模式。这使您可以同时读取和写入文件,而不必使用r
和w
)>
答案 2 :(得分:-1)
第二个更好,因为您只打开了一次文件。我不知道您要使用file.write(text[start:end])
做什么,但是要小心,start = end = 0
,所以最后您什么都没有添加到文件中。