Эффективный способ найти общее количество файлов в каталоге
Я создаю органайзер музыкальных файлов (в python2), в котором я читаю метаданные всех файлов и затем помещаю их в нужную папку.
Теперь, я уже готов с интерфейсом командной строки, но этот скрипт показывает обратную связь таким образом, что он показывает "Над каким файлом он работает сейчас?".
Если каталог содержит, скажем, 5000 mp3 файлов, должна быть какая-то обратная связь.
Итак, я хотел бы знать, как наиболее эффективно найти общее количество mp3-файлов, доступных в каталоге (рекурсивное сканирование во всех последующих каталогах).
Моя идея состоит в том, чтобы отслеживать общее количество обработанных файлов и отображать индикатор выполнения в соответствии с этим. Есть ли лучший способ (с точки зрения производительности), пожалуйста, не стесняйтесь руководство.
Я хочу, чтобы мое приложение не имело никакого кода, зависящего от платформы. Если к этой идее прилагается серьезное снижение производительности, пожалуйста, предложите для Linux.
2 ответа
Прошу прощения за это, но нет никакого способа сделать это более эффективно, чем рекурсивный поиск файлов (по крайней мере, независимо от платформы (или файловой системы)).
Если файловая система может помочь вам, это будет, и вы ничего не можете сделать, чтобы помочь ей.
Причина невозможности сделать это без рекурсивного сканирования заключается в том, как устроена файловая система. Каталог может рассматриваться как файл, и он содержит список всех файлов, которые он содержит. Чтобы найти что-то в подкаталоге, вы должны сначала открыть каталог, затем открыть подкаталог и найти его.
@shadyabhi: если у вас много подкаталогов, возможно, вы можете ускорить процесс, используя os.listdir и multiprocessing.Process для повторения в каждую папку.