如何解决如何更改 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'])]
以便它在更深入之前遍历目录 a
、b
和 c
。
编辑:添加 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 举报,一经查实,本站将立刻删除。