os.listdir等在共享Windows路径上失败(Python 2.5)

0 投票
3 回答
1939 浏览
提问于 2025-04-15 17:54

我在处理共享路径时遇到了一些奇怪的问题(比如服务器上的共享路径,像是 \storage\Builds)。

我正在读取一个文本文件,里面包含了一些目录路径,我想进一步处理这些路径。为此,我是这么做的:

def toWin(path):
    return path.replace("\\", "\\\\")

for line in open(fileName):
    l = toWin(line).strip()
    if os.path.isdir(l):
        print l # os.listdir(l) etc..

这样在本地目录下是能正常工作的,但在共享系统上指定的路径就不行了。

e.g. 
    E:\Test -- works
    \\StorageMachine\Test -- fails [internally converts to \\\\StorageMachine\\Test]
    \\StorageMachine\Test\ -- fails  [internally converts to \\\\StorageMachine\\Test\\]

不过,如果我打开Python的命令行,导入脚本,然后用相同的路径字符串调用函数,那就能正常工作!

看起来在这两种情况下,解析Windows共享路径的行为是不同的。

有没有什么想法或建议呢?

3 个回答

0

其实没有必要去“转换”。反斜杠(\)只有在你的代码字符串里才会被解释,而当你从文件中读取它们时,反斜杠并不会被特别处理。所以,你应该关闭你的转换功能,这样事情可能就会正常运作了。

0

这可能不是你真正的问题,但你的UNC路径其实是不正确的——它们应该以两个反斜杠开头,而内部只用一个反斜杠作为分隔符。

我不太明白为什么在命令行中同样的东西会正常工作。

更新:我怀疑发生的情况是,在命令行中,你的字符串是被命令行解释的(会进行一些替换),而在你的代码中,它被当作第一次看到的字符串来处理——简单来说,在命令行中指定字符串和从输入中读取字符串是不同的。要在命令行中获得相同的效果,你需要把它指定为原始字符串,格式是r"字符串"

-1

需要把输入转换成斜杠(Unix风格的),这样os.*模块才能正确解析。

代码改成了下面这样

def toUnix(path):
    return path.replace("\\", "/")

现在所有模块都能正确解析了。

撰写回答