我在解析共享路径(服务器上的共享路径,例如\ 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共享路径在两种情况下的行为都不同。
有任何想法/建议吗?
答案 0 :(得分:0)
这可能不是你的实际问题,但是你的UNC路径实际上并不正确 - 它们应该以双反斜杠开头,但内部只使用一个反斜杠作为分隔符。
我不确定为什么同样的东西会在shell中运行。
<强>更新强>
我怀疑发生了什么,在shell中,你的字符串被shell解释(发生了替换),而在你的代码中它被视为第一次看到 - 基本上,指定shell中的字符串与读取不同它来自一个输入。要从shell获得相同的效果,您需要将其指定为r"string"
的原始字符串
答案 1 :(得分:0)
没有理由“转换”。反斜杠仅在代码中包含在字符串文字中时才会被解释,而不是在您从文件中以编程方式读取它们时。因此,您应该禁用转换功能,事情可能会有效。
答案 2 :(得分:-1)
必须将输入转换为正斜杠(unix-style)才能使os。*模块正确解析。
更改了以下代码
def toUnix(path):
return path.replace("\\", "/")
现在所有模块都正确解析。