我该如何在Python字符串字面量中编写Windows路径?

283 投票
5 回答
696622 浏览
提问于 2025-04-15 23:26

假设我需要提到一个路径 C:\meshes\as。如果我直接写成 "C:\meshes\as",我会遇到问题——要么出现一些错误,要么这个路径根本就不管用。这是因为 \ 被当作转义字符了吗?我应该怎么写这个路径呢?

5 个回答

37

没错,在Python的字符串中,\表示一个转义序列的开始。在你的路径中,有一个有效的两个字符的转义序列\a,它被合并成了一个字符,这个字符是ASCII铃声

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

其他常见的转义序列包括\t(制表符)、\n(换行符)、\r(回车符):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

正如你所看到的,在这些例子中,反斜杠和后面的字符组合在一起,形成了最终字符串中的一个字符。Python的转义序列的完整列表可以在这里找到。

处理这些情况有几种方法:

  1. 在字符串前加上rR,Python就不会处理转义序列

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. 在Windows上,Python也可以处理正斜杠。

  3. 你可以使用os.path.join ...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ...或者使用更新的pathlib模块

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    
46

使用 os.path 模块。

os.path.join( "C:", "meshes", "as" )

或者使用原始字符串。

r"C:\meshes\as"

我还建议路径或文件名中不要有空格。你可以在字符串中使用双反斜杠。

"C:\\meshes\\as.jpg"
415

你可以一直使用:

'C:/mydir'

这个在Linux和Windows上都能用。

还有一种方法是:

'C:\\mydir'

如果你在某些名字上遇到问题,也可以试试原始字符串字面量:

r'C:\mydir'

不过,最好的做法是使用os.path模块的函数,它总是能用你操作系统的正确路径分隔符(os.path.sep)来连接路径:

os.path.join(mydir, myfile)

从Python 3.4开始,你还可以使用pathlib模块。这和上面的方法是一样的:

pathlib.Path(mydir, myfile)

或者:

pathlib.Path(mydir) / myfile

撰写回答