os.walk不工作
在尝试自动化某个过程时,我遇到了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'
(这是一个原始字符串,专门用来解决这个问题的)。