Как мне получить путь, имя подкаталога и список файлов по порядку? - PullRequest
0 голосов
/ 03 июля 2018

Я пытался это сделать некоторое время, и я боюсь, что это будет помечено как дубликат, хотя я чувствую, что это не дубликат каталога, подкаталога и файлов списка Python, Это решение печатает его в формате path/subdirectory/files. Но это не то, что мне нужно.

Рассмотрим следующую структуру моего каталога:

Root

 - Directory1
    - Files
 - Directory2
    - Files
 - Directory3
    - Subdirectory
        - Sub-subdirectory1
            - Files
        - Sub-subdirectory2
            - Files
        - Sub-subdirectory3
            - Files
 - Directory4
    - Files

Для моей программы мне нужно имя пути, что не сложно. Тем не менее, мне также нужно имя подкаталога, что я могу сделать с for name in subdirs, однако я не могу получить имя файлов в подкаталоге. Вот что я пробовал:

for path, subdirs, files in os.walk(root):
    for dirname in subdirs:
        print dirname
        for filename in os.listdir(path + ‘\\’ + dirname):
            print filename

Это работает до тех пор, пока я не попаду в подкаталог, где он затем обрабатывает имена файлов как имена подкаталогов. Это становится проблемой в моей программе, поскольку приводит к ее аварийному завершению, и я извлекаю информацию из файлов и преобразую их в файлы XML. И мне нужно имя каталога, чтобы правильно назвать файл и дать ему соответствующий заголовок.

Я хочу следующий вывод:

 - Directory1
    - Files
 - Directory2
    - Files
 - Sub-subdirectory1
    - Files
 - Sub-subdirectory2
    - Files
 - Sub-subdirectory3
    - Files
 - Directory3
    - Files

Как мне добиться этого?

1 Ответ

0 голосов
/ 03 июля 2018

Если вы хотите распечатать только каталоги с файлами:

for path, subdirs, files in os.walk(root):
    if files:
        print os.path.basename(path)
        for filename in files:
            print '  ' + filename  # spaces are just for indent

Если вам тоже нужны пустые каталоги, удалите if files.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...