2011-12-07 7 views
0

私はまったく新しいPythonです。今はいくつかのものを試しています: os.walkを使ってすべてのディレクトリとファイルを再帰的に調べてください。os.walkはいくつかのディレクトリを解析していません

私の問題は、ファイルがいくつかのディレクトリに存在していても、それらのディレクトリにプログラムが再帰しないということです。私のマシンの一例は、Python2.7というディレクトリです。これは/ usrディレクトリ内にあります。一番上のパスを/ usrにすると、このディレクトリは解析されません。しかし、Python2.7ディレクトリへのパスを特に言及すると、それを解析します。誰が間違っているのかを指摘することで誰かを助けてくれる?ここ は私のコードです:

from os import walk, listdir, stat 
from os.path import join, isdir, isfile, islink, getsize, abspath, dirname, realpath 
from stat import ST_INO as st_ino 
from sets import Set 


def determine_parent_directory(root): 
    #print "parent-dirname : ", dirname(realpath(root)) 
    return stat(dirname(abspath(root))).st_ino 

def determine_size(root, file): 
    size_type = "" 
    file_size = getsize(abspath((join(root, file)))) 
    if file_size < 1024: 
     size_type = "bytes" 
    else: 
    if file_size > 1024: 
     file_size /= 1024     
     size_type = "Kb" 
    if file_size > 1024: 
     file_size /= 1024 
     size_type = "Mb" 
    if file_size > 1024: 
     file_size /= 1024 
     size_type = "Gb" 
    if file_size > 1024: 
     file_size /= 1024 
     size_type = "Tb" 

    return [file_size, size_type] 

def walk_through(path): 
    total_size = 0 
    for root, dirs, files in walk(path): 
     print root.split("/")[-1] 
     print "\n" 

     for file in files: 
      if islink(abspath(join(root, file))): 
       print "link" 
       continue 
      #total_size += determine_size(root, file)[0] 
      file_size, size_type = determine_size(root, file) 
      print "\t\t\t{0} -- {1} {2}".format (file, file_size, size_type) 
      #total_size += file_size 
    print "\n" 
    #print total_size 

def get_path_user(): 
    default_path = "/usr" 
    walk_through(default_path) 

if __name__ == '__main__': 
    get_path_user() 
+1

あなたのインデントはwalk_throughから下がってしまいます。私はあなたがコピーし貼り付けただけで、あなたのコードがどのように見えるのか正確ではないと思います...そうですか? –

答えて

0

は、これらのディレクトリのパーミッションを確認してください - スクリプトが実行されているユーザーアカウントは、これらのディレクトリへの権限を持っていますか?

1

象徴的なリンクですか?デフォルトでは

([[、ONERROR =なし[、followlinks =偽]真=トップダウン、]トップ)

os.walk、徒歩()に解決のシンボリックリンクに歩いません。ディレクトリ。 followlinksをTrueに設定すると、シンボリックリンクが指すディレクトリを、それらをサポートするシステムに訪問することができます。

注:followlinksをTrueに設定すると、リンクが自身の親ディレクトリを指す場合、無限再帰が発生する可能性があることに注意してください。 walk()は、すでに訪れたディレクトリを追跡しません。

関連する問題