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

时间:2010-01-12 05:32:24

标签: python path

我在解析共享路径(服务器上的共享路径,例如\ 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 shell,导入脚本并使用相同的路径字符串调用函数,那么它可以工作!

似乎解析Windows共享路径在两种情况下的行为都不同。

有任何想法/建议吗?

3 个答案:

答案 0 :(得分:0)

这可能不是你的实际问题,但是你的UNC路径实际上并不正确 - 它们应该以双反斜杠开头,但内部只使用一个反斜杠作为分隔符。

我不确定为什么同样的东西会在shell中运行。

<强>更新 我怀疑发生了什么,在shell中,你的字符串被shell解释(发生了替换),而在你的代码中它被视为第一次看到 - 基本上,指定shell中的字符串与读取不同它来自一个输入。要从shell获得相同的效果,您需要将其指定为r"string"的原始字符串

答案 1 :(得分:0)

没有理由“转换”。反斜杠仅在代码中包含在字符串文字中时才会被解释,而不是在您从文件中以编程方式读取它们时。因此,您应该禁用转换功能,事情可能会有效。

答案 2 :(得分:-1)

必须将输入转换为正斜杠(unix-style)才能使os。*模块正确解析。

更改了以下代码

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

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