Какой способ работы с файлами лучше: «r» + «a» или «r +»? - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю с текстовым файлом. Я читаю его, затем выполняю некоторые действия и затем пишу в него.

На самом деле здесь нет никаких проблем, но мне интересно, какова производительность.

Я могу сделать это:

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 ]

2 голосов
/ 08 апреля 2019

Это будет сильно зависеть от ОС и файловой системы. Я бы предположил , что опция r+ будет (незначительно) быстрее, потому что она избегает создания дополнительного дескриптора файла, но кэширование на уровне ОС может легко сгладить различия.

Однако любая разница будет настолько мала, что не имеет значения , несмотря на все остальное. Ввод / вывод медленный, несмотря ни на что. Дополнительные затраты на создание еще одного файлового объекта не будут шуметь при нормальной изменчивости таймингов ввода / вывода.

Учтите, что при использовании шаблона r / a на большинстве платформ файлы, открытые для добавления, явно блокируются от перезаписи данных до конца. Это защищает вас от ошибок с поиском, которые случайно перезаписывают неправильные части.

0 голосов
/ 08 апреля 2019

Второй вариант лучше, потому что вы открываете файл только один раз. Я не знаю, что вы хотите сделать с file.write(text[start:end]), но будьте осторожны, start = end = 0, так что, наконец, вы ничего не добавляете к файлу.

0 голосов
/ 08 апреля 2019

Это зависит от того, что вы делаете с файлом, так как вам нужно читать и писать в указанном файле, я бы предложил использовать r+.(r+ имеет как режим чтения, так и режим записи одновременно. Это позволяет одновременно считывать и записывать файлы без использования r и w)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...