Просто отметим, что другим вариантом для решения этой задачи может быть модуль subprocess
, который поможет нам выполнить команду в терминале, например:
import subprocess
command = "find"
directory = "/Possible/path/"
flag = "-iname"
file = "something.foo"
args = [command, directory, flag, file]
process = subprocess.run(args, stdout=subprocess.PIPE)
path = process.stdout.decode().strip("\n")
print(path)
При этом мы эмулируем передачу следующей команды в Терминал:
find /Posible/path -iname "something.foo"
.
После этого, учитывая, что атрибут stdout
является двоичной строкой, нам нужно декодировать его и удалить завершающий символ "\ n".
Я протестировал его с магией %timeit
в шпионе, и производительность на 0,3 секунды ниже, чем у опции os.walk()
.
Я заметил, что вы находитесь в Windows, поэтому вы можете искать команду, которая ведет себя подобно find
в Unix.
Наконец, если у вас есть несколько файлов с одинаковыми именами в разных каталогах, результирующая строка будет содержать все из них. Следовательно, вам нужно разобраться с этим надлежащим образом, возможно, используя регулярные выражения.