2016-02-11 3 views
0

У меня есть каталог, который содержит много подкаталогов и внутри каждого подкаталога у меня есть еще несколько под-подкаталогов.Как печатать только дерево поддиректории с помощью python?

enter image description here

У меня есть код питона, который печатает и записывает каталог и подкаталог в файле. Код:

import os 
file = open("list", "w") 
for root, dirs, files in os.walk("./customers/"): 
    print root 
    file.write(root+"\n") 

Этот вывод, как:

./customers/A 
./customers/A1 
./customers/A2 
./customers/B 
./customers/B1 
./customers/B2 
./customers/C 
./customers/C1 
./customers/C2 

Я просто хочу:

./customers/A1 
./customers/A2 
./customers/B1 
./customers/B2 
./customers/C1 
./customers/C2 
+2

Там нет никакого способа, с этой структурой каталогов, что выход как вы показываете. Он выводит './Customers/A/A1' не'./Customers/A1'. – mhawke

+0

хорошо ... так что можно сделать, чтобы преодолеть это? – PythonFreak

+0

Ну, первое, что вы можете сделать, это исправить свой вопрос. – mhawke

ответ

1

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

import os 

with open('list', 'w') as outfile: 
    for root, dirs, files in os.walk("./customers/"): 
     if not dirs: # if root has no sub-directories it's a leaf 
      print root 
      outfile.write(root+"\n") 

Для структуры каталогов это Выведите:

 
./customers/C/C2 
./customers/C/C1 
./customers/B/B2 
./customers/B/B1 
./customers/A/A2 
./customers/A/A1 

, который выглядит, как он может быть то, что вы хотите.

Если вы хотите, чтобы вывод отсортирован вы могли бы написать функцию генератора и сортировать его вывод:

import os 

def find_leaf_directories(top): 
    for root, dirs, files in os.walk(top): 
     if not dirs: # if root has no sub-directories it's a leaf 
      yield root 

with open('list', 'w') as outfile: 
    for dir in sorted(find_leaf_directories('./customers/')): 
     print dir 
     outfile.write(dir+"\n") 

Что будет:

 
./customers/A/A1 
./customers/A/A2 
./customers/B/B1 
./customers/B/B2 
./customers/C/C1 
./customers/C/C2 
+0

точно !!!! Спасибо – PythonFreak

+0

@PythonFreak: это как будто я читатель разума! – mhawke

+0

lol yeah .. но я хочу знать еще одну вещь ... что делать, если я просто хочу распечатать родительский каталог, то есть A, B, C – PythonFreak

 Смежные вопросы

  • Нет связанных вопросов^_^