哪种文件处理方式更好:“ r” +“ a”或“ r +”?

时间:2019-04-08 16:07:43

标签: python performance file

我正在处理一个文本文件。我先阅读它,然后执行一些操作,然后将其写入。

这里实际上没有问题,但是我对性能感到好奇。

我可以这样做:

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])

哪种方式在性能上更好?

3 个答案:

答案 0 :(得分:2)

这将在很大程度上取决于操作系统和文件系统。我猜测r+选项将(略微)更快,因为它避免了创建额外的文件句柄,但是操作系统级别的缓存可以轻松地消除差异。

但是,面对其他所有问题,任何差异都将变得很小,以至于无所谓。无论如何,I / O都很慢。在I / O时序的正常变化中,要再创建一个文件对象不会增加成本。

请注意,当您使用r / a模式时,在大多数平台上,为添加而打开的文件在结束之前都被明确禁止覆盖数据。这样可以保护您免受错误搜索的影响,而错误最终会覆盖错误的部分。

答案 1 :(得分:0)

这取决于您对文件的处理方式,因为您需要读写指定的文件,因此建议您使用r+。 (r+同时具有读取模式和写入模式。这使您可以同时读取和写入文件,而不必使用rw

答案 2 :(得分:-1)

第二个更好,因为您只打开了一次文件。我不知道您要使用file.write(text[start:end])做什么,但是要小心,start = end = 0,所以最后您什么都没有添加到文件中。