【问题标题】:Understanding Backslash Behaviour (Windows)了解反斜杠行为 (Windows)
【发布时间】:2014-11-21 12:42:09
【问题描述】:

我声明变量'路径'

path = "C:\\dir\\file.zip"

因为第一个斜杠转义了第二个,所以

print path
>>>C:\dir\file.zip

但是,当我尝试解压缩文件时

inF = gzip.GzipFile(path, 'rb')

我得到了错误

IOError: [Errno 2] No such file or directory: 'C:\\dir\\file.gz'

这些额外的反斜杠是如何出现的,我该如何解决?

TIA

【问题讨论】:

  • 出现额外的反斜杠是因为错误消息使用了传递给它的路径的repr 版本。
  • 更简单的方法是将反斜杠替换为正斜杠。 Windows 和 linux 都应该使用正斜杠。
  • @JustinEngel 更改斜线不会解释这种情况。毕竟,问题是关于了解发生了什么。通过使用不同的斜杠来避免它没有帮助。

标签: python windows path


【解决方案1】:

那些额外的反斜杠是为了使字符串明确,因为它可能包含引号、换行符等。 IOError 打印了字符串的repr 形式,这样可以通过将其复制到 Python 代码中来重新创建该值:

>>> path = "C:\\dir\\file.zip"
>>> print path
C:\dir\file.zip
>>> print repr(path)
'C:\\dir\\file.zip'

因此,额外的反斜杠与您最初所做的转义完全相同,并且对错误本身没有影响。

【讨论】:

    【解决方案2】:

    '\' 用于消除任何字符的特殊含义,例如 ''"" 或 '\' 和 manu other。

    rawstring 为你做同样的事情check here

    改为

    path = "C:\\dir\\file.zip"
    path = r'C:\dir\file.zip'
    
    >>> print 'C:\\dir\\file.zip'
    C:\dir\file.zip
    
    >>> print (r'C:\Users\dir\file.zip') 
    C:\dir\file.zip
    
    >>> print (ur'C:\\Users\dir\file.zip') #ur'' as unicode string literals with \u or \U sequences are broken in python2 and several backslashes are treated as one on windows
    

    使用正斜杠而不是反斜杠

       >>> a = 'C:/User/dir/file.zip'
       >>> a
        'C:/User/dir/file.zip'
    

    【讨论】:

    • 它们完全一样。
    • Python 2 原始 unicode 字符串已损坏。试试ur"\Users"
    • @SmitJohnth in python2 str 使用字节串,这里给出了字节串,所以我认为这里不用担心 unicode,但感谢您的建议,我更新了我的代码。
    • 从问题来看,很明显 OP 知道转义字符是如何工作的。在这里使用原始字符串对 OP 的解决方案没有任何区别,也不能解释 OP 看到的结果。
    • @poke 我更新了代码并给出了问题的解决方案。请检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2011-02-23
    • 2021-12-31
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多