Эффективный способ найти общее количество файлов в каталоге

StackOverflow https://stackoverflow.com/questions/7371878

Вопрос

Я создаю организатор музыкальных файлов (на python2), в котором я читаю метаданные всех файлов, а затем помещаю их в нужную папку.

Теперь у меня уже есть интерфейс командной строки, но этот сценарий показывает обратную связь таким образом, что он показывает: «С каким файлом он сейчас работает?».

Если каталог содержит, скажем, 5000 mp3 файлов, должна быть какая-то обратная связь.

<цитата>

Итак, я хотел бы узнать, как наиболее эффективно определить общую количество mp3-файлов, доступных в каталоге (рекурсивное сканирование во всех последующие каталоги тоже).

Моя идея - отслеживать общее количество обработанных файлов и показывать индикатор выполнения в соответствии с этим.Есть ли лучший способ (с точки зрения производительности), пожалуйста, не стесняйтесь руководить.

Я хочу, чтобы в моем приложении не было кода, зависящего от платформы.Если эта идея серьезно ухудшает производительность, предложите вариант для Linux.

Это было полезно?

Решение

Мне жаль это говорить, но нет никакого способа сделать это более эффективно, чем рекурсивный поиск файлов (по крайней мере, это не зависит от платформы (или файловой системы)).

Если файловая система может вам помочь, она поможет, и вы ничем не можете ей помочь.

Причина, по которой это невозможно сделать без рекурсивного сканирования, заключается в том, как устроена файловая система. Каталог можно рассматривать как файл, и он содержит список всех содержащихся в нем файлов.Чтобы найти что-то в подкаталоге, вы должны сначала открыть каталог, затем открыть подкаталог и выполнить поиск в нем.

Другие советы

@shadyabhi: если у вас много подкаталогов, возможно, вы можете ускорить процесс, используя os.listdir и multiprocessing. Процесс для рекурсии в каждую папку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top