Эффективный способ поиска файлов в Python 3 - PullRequest
0 голосов
/ 15 июня 2019

Привет. Я пытаюсь найти все файлы .mp3 на моем компьютере, и у меня есть код, который принимает тип файла, такой как .mp3, .txt и т. Д., Как один вход, а путь к папке - как другой вход. и поиск во всех подпапках по указанному пути и в самой папке для типа файла и возвращает путь к файлу в списке, это занимает некоторое время, если в папке так много подпапок, или вместо этого, если в качестве входных данных я даю имя диска для «пути». Мне нужен эффективный способ сделать это. Если я сначала найду все подпапки в папке, а затем передам путь к подпапкам функции, будет ли она работать быстрее?

import os
import fnmatch


def find(pattern, path):
    result = []
    for root, dirs, files in os.walk(path):
        for name in files:
            if fnmatch.fnmatch(name, pattern):
                result.append(os.path.join(root, name))
    return result 

1 Ответ

0 голосов
/ 15 июня 2019

Я думаю, что это достаточно эффективно ... Команда where.exe /R C:\ *.mp3 будет действовать точно так же, как ваш скрипт на python.И ваш сценарий работает даже быстрее, чем встроенная команда windows, поэтому он должен быть достаточно эффективным.Я не знаю, был ли это ваш точный вопрос, если это не так, я думаю, что не совсем понятно, что вы на самом деле имеете в виду.

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

import os
import fnmatch


def find(pattern, path):
    for root, dirs, files in os.walk(path):
        for name in files:
            if fnmatch.fnmatch(name, pattern):
                yield os.path.join(root, name)

Разница в том, что если вы, например, выполните

for i in find('*.mp3', 'C:\\'):
    print(i)

, он напечатает каждый результат как можно быстрее.Ваш скрипт вернет весь список после завершения операции, в то время как этот скрипт напечатает напрямую.

Я не знаю, как объяснить это лучше, потому что мой английский не лучший, но вы можете просто попробоватьэто и увидеть разницу.

Это все же быстрее, чем Windows, встроенная в команду, кстати.

...