微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更改 os.walk() 输出的顺序?

如何解决如何更改 os.walk() 输出的顺序?

因此,显然 os.walk() 会“垂直”遍历目录,遍历输入的第一个目录及其所有子目录,然后移动到下一个“顶级”目录。

代码

import os

os.chdir("/home/test")
inp = str(os.getcwd() + "/input")

l = list(os.walk(inp))

输出

[('/home/test/input',['a','b','c'],['d.txt']),('/home/test/input/a',['aa'],['ac.txt','ab.txt']),('/home/test/input/a/aa',[],83),('/home/test/input/b',['bb.txt','bc.txt','ba.txt']),('/home/test/input/c',['ca'],81),('/home/test/input/c/ca',['caa'],['cab.txt']),('/home/test/input/c/ca/caa',['caaa.txt'])]

有没有办法“横向”行走? 我希望输出如下所示:

[('/home/test/input',['caaa.txt'])]

以便它在更深入之前遍历目录 abc

编辑:添加 topdown=False 参数没有帮助:

[('/home/philipp/test/input/a/aa',[]),('/home/philipp/test/input/a',('/home/philipp/test/input/b',('/home/philipp/test/input/c/ca/caa/x',('/home/philipp/test/input/c/ca/caa',['x'],['caaa.txt']),('/home/philipp/test/input/c/ca',('/home/philipp/test/input/c',('/home/philipp/test/input',['d.txt'])]

之后我仍然可以用循环对列表进行排序,但也许有一种更快、更优雅的方法来做到这一点。

(最终脚本中使用的文件和目录的数量可能会高于上面显示的示例。)

解决方法

为了回答您的问题,我认为没有办法使用一两行代码来做到这一点。不过,使用 os 模块还有更长的方法可以做到这一点!你可以试试这个:

import os

def _dir_list(path):
    files = [os.path.join(path,f) for f in os.listdir(path)]
    print(str(files) + "\n")
    for f in files:
        if os.path.isdir(os.path.join(path,f)):
            _dir_list(os.path.join(path,f))

path = r"C:\PATH"

_dir_list(path)

基本上,这将获取 1 个目录中的所有文件夹,而无需深入研究它们。然后,它通过文件递增,对于每个文件,它再次执行该功能,获取该目录中的文件,基本上做你想让它做的事情。

我们使用 os.listdir() 限制目录,它以列表的形式返回所有当前文件夹。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。