Как os.listdir () работает с очень большими папками? - PullRequest
1 голос
/ 15 января 2020

Я планирую получить огромную папку данных. Общий размер папки будет примерно 2TB и будет содержать около 2 миллионов файлов. Мне нужно будет выполнить некоторую обработку этих файлов (в основном, удалив 99% из них).

Я ожидаю некоторых проблем из-за размера данных. В частности, я хотел бы знать, может ли Python правильно отобразить эти файлы, используя os.listdir() за разумное время.

Например, из опыта я знаю, что в некоторых случаях удаление огромных папок, таких как этот на Ubuntu может быть болезненным.

Ответы [ 2 ]

2 голосов
/ 15 января 2020

os.scandir был создан в основном из-за проблем с использованием os.listdir в огромных каталогах , поэтому я ожидаю, что os.listdir пострадает в описанном вами сценарии, где os.scandir должен работать лучше, и потому, что он может обрабатывать папки с меньшим потреблением памяти, и потому (как правило) вы получаете хотя бы небольшую выгоду, избегая вызовов на вход stat (например, чтобы отличать guish файлов от каталогов).

1 голос
/ 15 января 2020

Если вы не получили эти миллионы файлов уже в виде огромной папки, вы можете легко разделить их при копировании, например, использовать первые несколько символов файла в качестве имени папки, например:

abcoweowiejr.jpg goes to abc/ folder
012574034539.jpg goes to 012/ folder

и так далее ... Таким образом, вам никогда не придется читать папку с миллионами файлов.

...