【问题标题】:What is wrong with this os.path usage?这个 os.path 用法有什么问题?
【发布时间】:2011-03-31 16:56:44
【问题描述】:

在 Windows XP、Python 2.6.6 上使用 os.path 获得意外结果:

a = "D:\temp\temp.txt"
os.path.dirname(a)
>>> 'D:' # Would expect 'D:\temp'
os.path.normpath(a)
>>> 'D:\temp\test.txt'
os.path.basename(a)
>>> '\temp\test.txt' #Would expect 'test.txt'
a.replace("\\", "/")
>>>'D:\temp\test.txt' # Would expect 'D:/temp/test.txt'

有人可以解释发生了什么吗?如何获得正确/预期的行为?为什么我不能用正斜杠替换反斜杠?

编辑:我从 wxPython 应用程序的文本字段中获取此路径,因此它以带有非转义反斜杠的字符串形式出现,我似乎无法用“替换”替换它们。

【问题讨论】:

    标签: python windows path


    【解决方案1】:

    你没有逃避你的反斜杠。要么使用\\ 而不是\,要么使用原始字符串,例如:

    a = r"D:\temp\temp.txt"
    

    在未转义的字符串中,\t 被解释为制表符。

    【讨论】:

    • 谢谢,有没有办法内联执行此操作,以便我可以执行 os.path.isdir(r'a') 之类的操作?
    • 如果您将 os.path.dirname 传递给 File 对象而不是字符串,则无需担心转义 - 您只需担心转义反斜杠或使用原始输入,因为你正在传递一个字符串。有什么办法可以绕过传递字符串?
    • @Benjamin:转义和原始字符串仅与 Python 代码中包含的字符串文字有关,与您从用户那里读取的值无关。如果您说您从文本字段中收到了字符串,那么您的问题可能有所不同,但是从问题中提供的信息中无法判断它是什么。
    • @IamChuckB:我不知道,这是来自textCtrl.GetValue(),所以它是一个字符串。
    • @Benjamin:获得字符串输入后,尝试执行print repr(a) 之类的操作。如果一切正常,它应该显示转义的反斜杠。
    【解决方案2】:

    您的问题在于 a 的分配。您需要转义字符串中的反斜杠试试这个:

    a = "D:\\temp\\temp.txt"
    

    【讨论】:

      【解决方案3】:

      使用 a.encode('string-escape') 似乎比其他解决方案更可取,因为 i) 它可以内联完成,并且 ii) 它不会添加额外的单引号/双引号。

      【讨论】:

        猜你喜欢
        • 2013-04-28
        • 2023-03-29
        • 2011-04-23
        • 1970-01-01
        • 2011-04-10
        • 2016-09-06
        • 2012-07-07
        • 2012-05-02
        相关资源
        最近更新 更多