2013-04-12 3 views
0

Я пытаюсь создать программу, которая может рекурсивно траверс несколько каталогов и распечатать файл листинга в hieararchical способом, как:Справочник Python путешествия os.path

Folder 
----x.c 
----x.bin 
----Folder 
---------x.c 

Я стараюсь делать с программой, как (с файлами/папками подробно):

#!/usr/bin/python 

import os 
for item in os.listdir(".") : 
     if os.path.isdir(item) : 
       print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     elif os.path.isfile(item) : 
       print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     else : 
       print "Nothing \n" 

Но я не могу пойти в любой каталог я стараюсь с как (А каталог здесь):

#!/usr/bin/python 

import os 
for item in os.listdir(".") : 
     if os.path.isdir(item) : 
       print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     elif os.path.isfile(item): 
       print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     else : 
       print "Nothing" 

for item in os.listdir("A") : 
     if os.path.isdir("A") : 
       print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 

     elif os.path.isfile("A") : 
       print "--" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     else : 
       print "Nothing" 

Перепечатка неверна, я не понимаю, почему я не могу просто уйти. А и как это сделать .И самое худшее, если я иду на B (вторая папка здесь):

#!/usr/bin/python 

import os 
for item in os.listdir(".") : 
     if os.path.isdir(item) : 
       print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     elif os.path.isfile(item): 
       print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     else : 
       print "dunno" 

for item in os.listdir("A") : 
     if os.path.isdir("A") : 
       print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 

     elif os.path.isfile("A") : 
       print "--" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     else : 
       print "lulz" 

for item in os.listdir("A/B") : 
     if os.path.isfile("A/B") : 
       print "---" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime) 
     else : 
       print 'Nothing' 

ответ

1

Я думаю, что вы хотите использовать os.walk

for (cur, dirs, files) in os.walk('.'): 
    pass 

Это даст вам текущую директорию , список каталогов в текущем каталоге и список файлов в текущем каталоге.

Я думаю, что вы хотите что-то вроде

for (cur, dirs, files) in os.walk('.'): 
    depth = len(cur.split('/')) 
    print "--" * depth, cur 
    for fname in files: 
     print "--" * (depth + 1), fname 
+0

Спасибо я пытаюсь понять, как это работает – lll

0

Заимствованные немного от этого ответа: List directory tree structure using Python

import os 

def list_files(path, spaceChar=' ', spaceWidth=4): 
    for root, dirs, files in os.walk(path): 
     level = root.replace(path, '').count(os.sep) 
     indent = spaceChar * (spaceWidth * level) 
     print('{}{}/'.format(indent, os.path.basename(root))) 
     subindent = spaceChar * spaceWidth * (level + 1) 
     for f in files: 
      print('{}{}'.format(subindent, f)) 

list_files(".", "-", 3) 
+0

я думаю, что это хорошо, но я действительно Дон Не понимаю. Мне слишком жаль. В любом случае, спасибо. – lll

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