在尝试自动化某些进程时,我遇到了Python的os.walk()的这个看似非常奇怪的行为:当我传递给它某个目录时,它什么也不做。但是,当我传递父目录时,它在直接传递时似乎无法工作的路径中正确地递归。
例如:
for root, _, _ in os.walk('F:\music'):
print(root)产生以下输出:
F:\音乐
..。
F:\音乐测试
F:\音乐\测试\破碎
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()的一些奇怪的限制吗?我真的很困惑。
发布于 2011-03-08 14:32:00
你的问题是:
for root, _, _ in os.walk('F:\music\test'):
print(root)...when解析包含路径的字符串,它将\t解释为Tab字符。您可以将路径字符串文字重写为'f:\\music\\test',也可以重写为r'F:\music\test' (一个原始字符串,正因为这个原因而存在)。
发布于 2011-03-08 14:31:57
您应该始终使用正斜杠,而不是在路径中使用反斜杠,即使在窗口上也是如此。所发生的是\t被解释为一个制表符,而不是斜杠。
发布于 2016-10-05 02:37:02
您最好使用os.path.normpath,并使用任何斜杠和反斜杠(无论多少),这样不仅可以解决问题,而且还可以使您的代码在这一点上跨越平台。
对于根,_,_ in os.walk(os.path.normpath('F:/music/test')):
https://stackoverflow.com/questions/5233814
复制相似问题