Я работал над сценарием, который считывает папку с файлами (каждый размером от 20 МБ до 100 МБ), изменяет некоторые данные в каждой строке и записывает обратно в копию файла.
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.writelines('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
При запуске этого кода с файлом размером 90 МБ (~ 900 000 строк) он печатал 140 секунд как время, необходимое для записи в файл. Здесь я использовал writelines()
. Поэтому я искал разные способы улучшить скорость записи файлов, и в большинстве прочитанных статей говорилось, что write()
и writelines()
не должны показывать никакой разницы, так как я пишу одну каскадную строку. Я также проверил время, необходимое только для следующего утверждения:
new_string = '\n'.join(new_my_list) + '\n'
И это заняло всего 0,4 секунды, поэтому большое количество времени заняло не создание списка.
Просто чтобы попробовать write()
Я попробовал этот код:
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.write('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
И это напечатало 2,5 секунды. Почему такая большая разница во времени записи файла для write()
и writelines()
, даже если это одни и те же данные? Это нормальное поведение или что-то не так в моем коде? Выходной файл кажется одинаковым для обоих случаев, поэтому я знаю, что потери данных отсутствуют.