虽然在试图自动化某个过程时,我遇到了Python os.walk()
这个看似非常奇怪的行为:当我将它传递给某个目录时,它只是没有做任何事情。但是,当我传递父目录时,它会在直接传递时似乎无效的路径中正确递归。
例如:
for root, _, _ in os.walk('F:\music'):
print(root)
产生以下输出:
F:\音乐
[...]
F:\音乐\测试
F:\音乐\测试\打破
F:\音乐\测试\打破\ Boards_Of_Canada
F:\音乐\测试\打破\ Brian_Eno
[...]
但是,当我尝试使用F:\ music \ test(在其父级调用os.walk()
时,它已经很好地递归):
for root, _, _ in os.walk('F:\music\test'):
print(root)
我根本没有得到任何输出。
有人知道发生了什么吗?难道我做错了什么?这是os.walk()
的奇怪限制吗?我真的很困惑。
答案 0 :(得分:20)
你的问题在这里:
for root, _, _ in os.walk('F:\music\test'):
print(root)
...当Python解析包含您路径的字符串时,它会将\t
解释为Tab字符。您可以将路径字符串文字重写为'f:\\music\\test'
或r'F:\music\test'
(原始字符串,正是出于这个原因而存在。)
答案 1 :(得分:7)
您应该始终在路径中使用正斜杠而不是反斜杠,即使在窗口上也是如此。发生的事情是\ t被解释为一个标签,而不是斜线。
答案 2 :(得分:2)
你最好使用os.path.normpath并使用你喜欢的任何斜杠和反斜杠(任意数量) 它不仅有助于解决您的问题,而且还会使您的代码在此时跨平台
对于os.walk中的root,_,_(os.path.normpath('F:/ music / test')):
答案 3 :(得分:0)
用于os.walk(“ \\”)中的root,dirs文件: 打印(根) 打印(目录) 打印(文件)
Windows路径使用“ \\”!