Я пытаюсь создать сценарий, чтобы перечислить все каталоги, подкаталоги и файлы в данном каталоге.
Я пробовал это:
import sys,os
root = "/home/patate/directory/"
path = os.path.join(root, "targetdirectory")
for r,d,f in os.walk(path):
for file in f:
print os.path.join(root,file)
К сожалению, это не работает должным образом.
Я получаю все файлы, но не все пути к ним.
Например, если структура dir будет:
/home/patate/directory/targetdirectory/123/456/789/file.txt
Он напечатает:
/home/patate/directory/targetdirectory/file.txt
Мне нужен первый результат. Любая помощь будет принята с благодарностью! Спасибо.
print(os.path.join(path, name))
На всякий случай ... Получение всех файлов в каталоге и подкаталогах, соответствующих некоторому шаблону (например, * .py):
источник
Вот однострочный:
Самый внешний
val for sublist in ...
цикл делает список одномерным.j
Цикл собирает список всех файлов и присоединяется к базовому его к текущему пути. Наконец,i
цикл проходит по всем каталогам и подкаталогам.В этом примере
./
вos.walk(...)
вызове используется жестко запрограммированный путь , вы можете добавить любую строку пути, которая вам нравится.Примечание:
os.path.expanduser
и / илиos.path.expandvars
может использоваться для строк путей, таких как~/
Расширение этого примера:
Его легко добавить в тесты базового имени файла и тесты имени каталога.
Например, проверка
*.jpg
файлов:Дополнительно, исключая
.git
каталог:источник
os.walk
использовать ручную петлю, генераторы отличные, используйте их.Не удалось прокомментировать, поэтому пишу здесь ответ. Это самая ясная строчка, которую я видел:
источник
Вы можете взглянуть на этот образец, который я сделал. Он использует функцию os.path.walk, которая устарела, будьте осторожны. Использует список для хранения всех путей к файлам.
источник
Немного проще однострочник:
источник
Поскольку в каждом примере здесь просто используется
walk
(withjoin
), я хотел бы показать хороший пример и сравнение сlistdir
:Так что, как видите,
listdir
версия намного эффективнее. (и этоjoin
медленно)источник