os.walk不走路

时间:2011-03-08 14:28:29

标签: python

虽然在试图自动化某个过程时,我遇到了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()的奇怪限制吗?我真的很困惑。

4 个答案:

答案 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路径使用“ \\”!