Я пытаюсь сделать сценарий для списка всего каталога, подкаталога и файлов в данном каталоге.
Я попробовал это:
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)
Unfortunatly это не работает правильно.
Я получаю все файлы, но не их полные пути.
Например, если структура dir была бы:
/home/patate/directory/targetdirectory/123/456/789/file.txt
Это распечатало бы:
/home/patate/directory/targetdirectory/file.txt
То, в чем я нуждаюсь, является первым результатом. Любая справка значительно ценилась бы!Спасибо.
Используйте os.path.join
, чтобы объединить каталог и имя файла :
for path, subdirs, files in os.walk(root):
for name in files:
print os.path.join(path, name)
Обратите внимание на использование путь
, а не root
в конкатенации, поскольку использование root
было бы неверным.
В Python 3.4 был добавлен модуль pathlib для упрощения манипуляций с путями. Таким образом, эквивалент os.path.join
будет выглядеть следующим образом:
pathlib.PurePath(path, name)
Преимущество pathlib
в том, что вы можете использовать множество полезных методов для путей. Если вы используете конкретный вариант Path
, вы также можете выполнять фактические вызовы ОС через них, например, переход в каталог, удаление пути, открытие файла, на который он указывает, и многое другое.
В объединении следует использовать 'r' вместо 'root'