os.walk不工作

6 投票
4 回答
13471 浏览
提问于 2025-04-16 13:15

在尝试自动化某个过程时,我遇到了Python的os.walk()这个函数的一个看起来很奇怪的行为:当我给它传一个目录时,它似乎什么都不做。但是,当我传递它的父目录时,它却能正常地遍历下去,而直接传递的路径却不行。

举个例子:

for root, _, _ in os.walk('F:\music'):
    print(root)

这段代码的输出是:

F:\music
[...]
F:\music\test
F:\music\test\broken
F:\music\test\broken\Boards_Of_Canada
F:\music\test\broken\Brian_Eno
[...]

但是当我尝试用 F:\music\test(这个路径在调用os.walk()的父目录时可以正常遍历)时,像这样:

for root, _, _ in os.walk('F:\music\test'):
    print(root)

我根本没有任何输出。

有没有人知道这是怎么回事?我是不是做错了什么?这是os.walk()的某种奇怪限制吗?我真的很困惑。

4 个回答

2

你最好使用 os.path.normpath 这个方法,这样你可以随意使用斜杠和反斜杠(不管用多少个都可以)。这样不仅能解决你的问题,还能让你的代码在不同的操作系统上都能运行。

比如,你可以这样写:for root, _, _ in os.walk(os.path.normpath('F:/music/test')):

7

在路径中,你应该始终使用正斜杠(/),而不是反斜杠(\),即使是在Windows系统上也是如此。因为反斜杠后面跟着的t(\t)会被当作制表符(tab)来处理,而不是你想要的斜杠。

23

你的问题出在这里:

 for root, _, _ in os.walk('F:\music\test'):
     print(root)

...当Python读取你路径中的字符串时,它把\t当成了一个制表符(Tab键的效果)。你可以把你的路径字符串改成'f:\\music\\test',或者用r'F:\music\test'(这是一个原始字符串,专门用来解决这个问题的)。

撰写回答