【问题标题】:os.walk not parsing a few directoriesos.walk 不解析几个目录
【发布时间】:2011-12-07 15:17:03
【问题描述】:

我对 python 有点陌生,现在我正在尝试一些东西,特别是: 递归遍历所有目录和文件并使用 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()

【问题讨论】:

  • 您的缩进从 walk_through 开始就搞砸了。我认为这只是您复制和粘贴的结果,而不是您的代码的样子……对吗?

标签: python


【解决方案1】:

是符号链接吗?

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

默认情况下,walk() 不会进入解析为目录的符号链接。将 followlinks 设置为 True 以访问由符号链接指向的目录,在支持它们的系统上。

注意:请注意,如果链接指向其自身的父目录,则将 followlinks 设置为 True 会导致无限递归。 walk() 不会跟踪它已经访问过的目录。

【讨论】:

    【解决方案2】:

    检查这些目录的权限 - 运行脚本的用户帐户是否有权访问这些目录?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2020-08-27
      相关资源
      最近更新 更多