【问题标题】:os.listdir etc fails on shared windows path (Python 2.5)os.listdir 等在共享 Windows 路径上失败(Python 2.5)
【发布时间】:2010-01-12 05:32:24
【问题描述】:

我在解析共享路径(服务器上的共享路径,例如 \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 共享路径的行为似乎有所不同。

有什么想法/建议吗?

【问题讨论】:

    标签: python path


    【解决方案1】:

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

    我不确定为什么同样的事情会在 shell 中工作。

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

    【讨论】:

    • 查看更新。他们从 \\Storage 开始。我不明白你在暗示什么。
    • 已更新。我怀疑它在 shell 中工作,因为当你输入它时 shell 正在解释字符串,而从输入文件读取的值是原始传递的。
    • 我正在从文件中读取路径名,需要将其转换为正确的格式。如何从文件(通过 readlines)将字符串读取为原始格式,以便 os.* 可以处理。
    【解决方案2】:

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

    【讨论】:

    • 此输入来自包含 Windows 路径的人,它们将位于 \。因此,转换确保无论以何种形式输入,它都会起作用。
    • 那又怎样?如果您在 Windows 下,Windows 路径将运行良好。
    【解决方案3】:

    必须将输入转换为正斜杠(unix 样式),os.* 模块才能正确解析。

    修改代码如下

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

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

    【讨论】:

    • 您的解释很可能是错误的。 os.* 函数完全能够处理包含反斜杠的路径,只要您的操作系统能够解释它们。请参阅我自己对您的问题的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2015-11-20
    • 2015-02-26
    • 2011-11-07
    • 2018-05-13
    • 1970-01-01
    相关资源
    最近更新 更多