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. Рад знать.

Кроме того, предложите несколько альтернативных способов сделать то же самое в памяти и время эффективным способом. ТИА.

Ответы на вопрос(2)

Ваш ответ на вопрос