Python readlines () использование и эффективная практика для чтения
У меня проблема с анализом 1000 текстовых файлов (около 3000 строк в каждом файле размером ~ 400 КБ) в папке. Я прочитал их, используя readlines,
for filename in os.listdir (input_dir) :
if filename.endswith(".gz"):
f = gzip.open(file, 'rb')
else:
f = open(file, 'rb')
file_content = f.readlines()
f.close()
len_file = len(file_content)
while i < len_file:
line = file_content[i].split(delimiter)
... my logic ...
i += 1
Это прекрасно работает для выборки из моих входов (50 100 файлов). Когда я запустил на всех входных данных более 5 тыс. Файлов, затраченное время не было близко к линейному приращению. Я планировал провести анализ производительности и анализ Cprofile. Время, затрачиваемое на большее количество файлов, экспоненциально увеличивается с достижением худших показателей, когда входные данные достигают 7K файлов.
Вот кумулятивное время, необходимое для чтения строк: первый -> 354 файла (образец из ввода) и второй -> 7473 файла (весь ввод)
ncalls tottime percall cumtime percall filename:lineno(function)
354 0.192 0.001 **0.192** 0.001 {method 'readlines' of 'file' objects}
7473 1329.380 0.178 **1329.380** 0.178 {method 'readlines' of 'file' objects}
Из-за этого время, затрачиваемое моим кодом, не линейно масштабируется при увеличении входных данных. Я прочитал некоторые заметки наreadlines()
где люди утверждали, что этоreadlines()
читает все содержимое файла в память и, следовательно, обычно занимает больше памяти по сравнению сreadline()
или жеread()
.
Я согласен с этим, но должен ли сборщик мусора автоматически очищать загруженный контент из памяти в конце цикла, следовательно, в любой момент в моей памяти должно быть только содержимое моего текущего обработанного файла, верно? Но здесь есть кое-что. Может кто-нибудь дать некоторое представление об этой проблеме.
Это неотъемлемое поведениеreadlines()
или моя неправильная интерпретация сборщика мусора python. Рад знать.
Кроме того, предложите несколько альтернативных способов сделать то же самое в памяти и время эффективным способом. ТИА.