1

我有一个原始字符串表示 Windows 上的路径,如下所示:'F:\\Music\\v flac\\1-06 No Quarter.flac\r'我应该怎么做才能让 open() 接受它?os.path.normpath() 不起作用。

>>> path
'F:\\Music\\v flac\\1-06 No Quarter.flac\r'
>>> fp=open(path,'rb')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 22] invalid mode ('rb') or filename: 'F:\\Music\\v flac\\1-06 No
 Quarter.flac\r'
>>> fp=open(os.path.normpath(path),'rb')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 22] invalid mode ('rb') or filename: 'F:\\Music\\v flac\\1-06 No
 Quarter.flac\r'
>>>
4

1 回答 1

5

双斜线不是这里的问题。是最后的\r回车符导致您出现问题。

从路径串起来:

fp = open(path.strip(), 'rb')

Python 仅显示字符串的字符串文字表示path,以便于调试。任何具有特殊含义的字符,在可打印的 ASCII 范围之外,都会被转义,包括反斜杠。值本身没有双反斜杠:

>>> path = 'F:\\Music\\v flac\\1-06 No Quarter.flac\r'
>>> path
'F:\\Music\\v flac\\1-06 No Quarter.flac\r'
>>> print path
F:\Music\v flac\1-06 No Quarter.flac
>>> path[:3]
'F:\\'
>>> len(path[:3])
3

请注意打印 path如何显示只有单个反斜杠的路径值以及路径的前 3 个字符是F:\,长度为 3 而不是 4 的字符串。然而,在 Python 字符串文字中,反斜杠将表示转义序列,因此 Python 也会转义这些。

于 2013-07-31T12:49:54.120 回答