os.walk()在使用UNC路径时不处理子目录

时间:2016-04-18 22:16:24

标签: python windows os.walk

我在Windows上的python 2.7.8中遇到os.walk()问题。

当我提供正常的'像"D:\Test\master"这样的路径按预期工作。但是,当我向它提供UNC路径(例如"\\?\D:\Test\master"时,它将按预期报告根目录,但它不会向下钻取到子目录,也不会引发异常。

我的研究:我在help page上读到os.walk()接受函数参数来处理错误。默认情况下,此参数为None,因此不会报告错误。

我传递了一个简单的函数来打印错误,并为每个目录收到以下内容。

def WalkError(Error):
    raise Exception(Error)

堆栈追踪:

Traceback (most recent call last):
  File "Compare.py", line 988, in StartServer
    for root, dirs, files in os.walk(ROOT_DIR,True,WalkError):
  File "C:\Program Files (x86)\Python2.7.8\lib\os.py", line 296, in walk
    for x in walk(new_path, topdown, onerror, followlinks):
  File "C:\Program Files (x86)\Python2.7.8\lib\os.py", line 281, in walk
    onerror(err)
  File "Compare.py", line 62, in WalkError
    raise Exception(Error)
Exception: [Error 123] The filename, directory name, or volume label syntax is incorrect: '\\\\?\\D:\\Test\\master\\localization/*.*'

1 个答案:

答案 0 :(得分:1)

原作者的回答(最初发布为问题的编辑):

即时更新:在检查\lib\os.py的过程中,我发现错误源于os.listdir()。我搜索了与os.listdir()相关的上述错误消息,并找到了对我有用的this solution

看起来如果您要使用UNC样式路径和os.模块,他们需要进行Unix化(将\转换为/)。 \\\\?\\D:\\Test\\master\\变为//?/D:/Test/master/(注意:您不再需要逃避\,这很方便。

这与UNC 'spec'背道而驰,因此请注意您是否正在使用其他尊重Microsoft UNC实施的模块。

(对不起自我解决方案,我打算关闭标签,但觉得这里有知识,在其他地方找不到。)