【问题标题】:python string errorpython字符串错误
【发布时间】:2011-06-30 11:13:21
【问题描述】:
dir = "C:\Users\Geraldes\Desktop\media\teste\ASMS_TapeA01A1691329.mxf"

print dir

使用上面的代码,我明白了...我知道 \t 是制表符

C:\Users\Geraldes\Desktop\media  (espacamento)  este\ASMS_TapeA01A1691329.mxf

但是,要解决这个问题,我会这样做:

dir1 = dir.replace("\\", "\\\\")

print "dir:",dir1

我得到了

C:\\Users\\Geraldes\\Desktop\\media (espacamento)  este\\ASMS_TapeA01A1691329.mxf

我该如何解决这个问题?

【问题讨论】:

    标签: python string filepath


    【解决方案1】:

    转义原始字符串的反斜杠,或使用原始字符串。

    也就是说,

    dir = "C:\\Users\\Geraldes\\Desktop\\media\\teste\\ASMS_TapeA01A1691329.mxf"
    

    dir = r"C:\Users\Geraldes\Desktop\media\teste\ASMS_TapeA01A1691329.mxf"
    

    但是:要小心第二个选择,因为原始字符串不是为 windows 路径发明的——它们是为正则表达式而放置的。因此,有一天你会发现你想在字符串的末尾加上一个反斜杠,像这样:

    dir = "C:\Users\Geraldes\Desktop\media\teste\"
    

    这行不通。对此进行了更深入的讨论here

    【讨论】:

    • 谢谢大家,我在一件简单的事情上玩得很糟糕;)
    • 你可以写成:r"C:\whatever\whatever\\"。最后你会得到两个反斜杠,但是没关系。路径仍然可以正常工作!
    • 有些东西会被尾部斜杠和双斜杠阻塞。并非所有内容都能正确解析路径。
    • 是的。我应该说 Windows 可以在路径名中有一个空段,但谁知道其他代码可能有什么期望。
    【解决方案2】:

    没有人说,但是除了扩展的反斜杠和原始字符串之外,您还可以使用正斜杠

    >>> dir = "C:/Users/Geraldes/Desktop/media/teste/ASMS_TapeA01A1691329.mxf"
    >>> dir
    'C:/Users/Geraldes/Desktop/media/teste/ASMS_TapeA01A1691329.mxf'
    >>> 
    

    事实上,Windows 接受正斜杠(Check this 了解更多信息)

    Microsoft Windows [Versión 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
    
    C:\>cd Users/joaquin
    
    C:\Users\joaquin>
    

    无论如何,最安全的方法是使用os.path.join 以与操作系统无关的方式构建路径。

    >>> import os
    >>> os.path.join('C:\Users', 'Geraldes', 'Desktop', 'media', 'teste', 'ASMS.mxf')
    'C:\\Users\\Geraldes\\Desktop\\media\\teste\\ASMS.mxf'
    >>> 
    

    【讨论】:

    • 正斜杠适用于大多数情况,但并非适用于所有情况。假设任何给定的东西都可以与正斜杠一起使用是不安全的——太多了。
    • @Chris Morgan,对,我给出的链接上有一个讨论。对于所讨论的案例(对于 Windows 中的路径名字符串),我仍然没有发现任何问题。如果您能举个例子说明斜线的潜在问题,那将会很有趣。
    • 我还要指出,您可以使用 os.path.normpath(在我的回答中链接到的文章中讨论过)来避免路径中的斜线出现任何潜在问题跨度>
    • @joaquin:我遇到了一些不能正常使用正斜杠的东西,但我想不出其中任何一个。我发现它的主要麻烦是如果您使用正斜杠,命令提示符中的路径完成不起作用。
    【解决方案3】:

    定义一个“原始”字符串:

    dir = r"C:\Users\Geraldes\Desktop\media\teste\ASMS_TapeA01A1691329.mxf"
    

    【讨论】:

    • 太棒了,从来不知道这种方式;再见双斜线!
    【解决方案4】:

    您可以使用原始格式:

    dir = r"C:\Users\Geraldes\Desktop\media\teste\ASMS_TapeA01A1691329.mxf"
    

    这将打印为:

    >>> print(dir)
    C:\Users\Geraldes\Desktop\media\teste\ASMS_TapeA01A1691329.mxf
    

    【讨论】:

      【解决方案5】:

      一种不太明显且效率较低的方法是执行以下操作:

      import os
      os.chdir()#change to each directory separately
      print os.getcwd()
      

      【讨论】:

        猜你喜欢
        • 2015-10-25
        • 2012-03-24
        • 2013-12-08
        • 1970-01-01
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        相关资源
        最近更新 更多