循环通过Python的os.walk()混淆

时间:2014-06-25 03:18:10

标签: python loops python-2.7

我正在开发一个脚本,它会抓取硬盘并收集每个文件的信息 它通过fnmatch和magic来遇到。

我觉得yield_files(root)中第一个嵌套的for循环是不必要的

def yield_files(root):

    for root, dirs, files in os.walk(root):
        """ Is this necessary 

        for directory in dirs:
            for filename in directory:
                filename = os.path.join(root, filename)
                if os.path.isfile(filename) or os.path.isdir(filename):
                    yield FileInfo(filename)
        """

        for filename in files:
            filename = os.path.join(root, filename)
            if os.path.isfile(filename) or os.path.isdir(filename):            
                yield FileInfo(filename)
无论如何,

将os.walk()endup递归到这些目录中

1 个答案:

答案 0 :(得分:3)

def yield_files(root):
    for root, dirs, files in os.walk(root):
        for filename in files:
            filename = os.path.join(root, filename)
            if os.path.isfile(filename) or os.path.isdir(filename):            
                yield FileInfo(filename)

这就是你所需要的一切。其余的确实没必要。 os.walk进入子目录,因此您不需要当前目录的路径,只需要root作为路径连接的基础。