В Python 3.6 требуется больше времени для чтения файла, если есть разрывы строк. Если у меня есть два файла: один с разрывами строк и один без разрывов строк (но в противном случае они имеют один и тот же текст), тогда файл с разрывами строк займет около 100-200% времени для чтения. Я привел конкретный пример.
Шаг # 1: создайте файлы
sizeMB = 128
sizeKB = 1024 * sizeMB
with open(r'C:\temp\bigfile_one_line.txt', 'w') as f:
for i in range(sizeKB):
f.write('Hello World!\t'*73) # There are roughly 73 phrases in one KB
with open(r'C:\temp\bigfile_newlines.txt', 'w') as f:
for i in range(sizeKB):
f.write('Hello World!\n'*73)
Шаг # 2: Прочитайте файл с одной строкой и временем
IPython
%%timeit
with open(r'C:\temp\bigfile_one_line.txt', 'r') as f:
text = f.read()
Выход
1 loop, best of 3: 368 ms per loop
Шаг №3: Прочитайте файл со многими строками и временем
IPython
%%timeit
with open(r'C:\temp\bigfile_newlines.txt', 'r') as f:
text = f.read()
Выход
1 loop, best of 3: 589 ms per loop
Это только один пример. Я тестировал это для разных ситуаций, и они делают то же самое:
- Различные размеры файлов от 1 МБ до 2 ГБ.
- Использование file.readlines() вместо file.read()
- Использование пробела вместо закладки ('\ t') в файле с одной строкой (т.е. "Hello World!" )
Я пришел к выводу, что файлы с новыми строками ('\n') занимают больше времени, чем файлы без них. Однако я ожидал бы, что к всем персонажам будут относиться одинаково. Это может иметь важные последствия для производительности при чтении большого количества файлов. Кто-нибудь знает, почему это происходит?
Я использую Python 3.6.1, Anaconda 4.3.24 и Windows 10.