Python readlines () i efektywna praktyka czytania

Mam problem z analizowaniem 1000 plików tekstowych (około 3000 linii w każdym pliku o rozmiarze ~ 400 KB) w folderze. Przeczytałem je za pomocą 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  

Działa to całkowicie dobrze dla próbki z moich wejść (50, 100 plików). Gdy pobiegłem na całym wejściu więcej niż 5K plików, czas ten nie był bliski przyrostowi liniowemu. Planowałem przeprowadzić analizę wydajności i wykonać analizę Cprofile. Czas potrzebny na to, aby więcej plików wzrastało wykładniczo, osiągając niższe wskaźniki, gdy dane wejściowe sięgały plików 7K.

Oto skumulowany czas potrzebny na linie, najpierw -> 354 pliki (próbka z wejścia) i drugi -> 7473 pliki (całe wejście)

 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}

Z tego powodu czas potrzebny na mój kod nie jest skalowany liniowo wraz ze wzrostem wejścia. Przeczytałem kilka notatek na ten tematreadlines(), gdzie ludzie twierdzą, że toreadlines() wczytuje całą zawartość pliku do pamięci, a zatem generalnie zużywa więcej pamięci niżreadline() lubread().

Zgadzam się z tym punktem, ale czy garbage collector automatycznie czyści załadowaną zawartość z pamięci na końcu mojej pętli, stąd w każdej chwili moja pamięć powinna mieć tylko zawartość mojego aktualnie przetwarzanego pliku? Ale jest tu jakiś haczyk. Czy ktoś może dać wgląd w ten problem.

Czy jest to wrodzone zachowaniereadlines() lub moja zła interpretacja oczyszczacza śmieci Pythona. Dobrze wiedzieć.

Zasugeruj także alternatywne sposoby robienia tego samego w sposób efektywny pamięciowo i czasowo. TIA.

questionAnswers(2)

yourAnswerToTheQuestion