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

How should I write a Windows path in a Python string literal?

提问人:Gareth 提问时间:6/2/2010 最后编辑:Karl KnechtelGareth 更新时间:11/6/2023 访问量:656385

问:

假设我需要引用路径。如果我尝试直接编写它,例如,我会遇到问题 - 要么是一些异常,要么是路径不起作用。这是因为扮演逃避角色吗?我应该如何编写路径?C:\meshes\as"C:\meshes\as"\

python 路径 字符串文本

评论

0赞 IceCold 3/21/2022
Смотритетакже: medium.com/swlh/...

答:

45赞 S.Lott 6/2/2010 #1

使用该模块。os.path

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

或者使用原始字符串

r"C:\meshes\as"

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

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

评论

20赞 dash-tom-bang 6/2/2010
当组件是驱动器号时,os.path.join 的行为可能不符合预期,因为即使这样也允许使用相对路径。(第一行的结果是 Windows 上的“C:meshes\\as”。
1赞 Jack O'Connor 2/21/2014
@dash-tom-bang的评论真的很重要。作为第一个条目是正确的做法吗?这会搞砸一些使用的清洁度吗?"C:\"join
2赞 Agostino 4/8/2015
@JackO康纳,这就是我的工作。您当然不想放在文件名的中间。此外,您可以在连接之前或之后使用,以确保路径打印得当。"C:\"os.path.normpath
2赞 Jean-François Fabre 3/2/2019
但它也不起作用。有效的是os.path.join( "C:\\", "meshes", "as" )
0赞 Jürgen A. Erhard 8/8/2021
@JackO Connor,你正在处理Windows,你担心清洁度吗?;-)
403赞 joaquin 6/2/2010 #2

您可以始终使用:

'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

评论

2赞 joaquin 6/2/2010
@Gareth,我很懒惰,经常发现自己使用“/”。但是,从长远来看,使用os.path会更方便。它还允许您使用 mydir 和 myfile 作为可以轻松修改的变量。
26赞 Douglas Leeder 6/30/2010
在原始字符串上唯一需要注意的是它们不能以 \ 结尾
1赞 Will Ediger 8/5/2014
您可以使用 os.path.join() 来消除以 \ 结束路径的需要。
1赞 peterb 8/21/2016
我喜欢r(原始字符串)语法。如果您要复制一条长路径,通常必须将所有反斜杠替换为正斜杠,这将很有用
0赞 Max Kleiner 6/24/2020
原始字符串可以以 \\ 结尾,因此我们可以将文件连接到以下路径:codecs.open(r“C:\maXbox\EKON24\tweet_data\\” + file, 'r', encoding='utf-8') as f:
35赞 vaultah 3/31/2018 #3

是的,在 Python 中,字符串文字表示转义序列的开始。在您的路径中,您有一个有效的双字符转义序列,该序列被折叠成一个字符,即 ASCII Bell\\a

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

其他常见的转义序列包括 (tab)、(换行符)、(回车符):\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. Python 不会处理以 rR 为前缀的字符串文本中的转义序列

    >>> 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')
    

评论

1赞 Karl Knechtel 4/9/2023
“其他常见的转义序列包括” - 别忘了用于 32 位 Unicode 码位转义。Windows 用户经常被此绊倒,因为他们想访问 .\UC:\Users
17赞 Contango 7/3/2021 #4

用:Path

from pathlib import Path
data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "raw_data.txt"
print(file_to_open.read_text())

Path采用类似路径的字符串,并针对当前操作系统(Windows 或 Linux)调整所有内容。例如,在 Linux 上,它会将所有反斜杠转换为正斜杠,而在 Windows 上,它会执行相反的操作。

全文:Python 3 快速提示:在 Windows、Mac 和 Linux 上处理文件路径的简单方法


我的经验:

  • 我花了 6 个月的时间使用 ,然后切换到 ,然后最终切换到 .在使用了这三者之后,Path 是世界上最好的。os.path.join(...)normpath(...)Path(...)

Path 的优势在于:os.path.join(...)

  • 清洁工。
  • 减少打字。
  • 路径更易于阅读(即更具可读性)。
  • 可以使用连接两个不同的路径(见上文)。/
  • 更现代。

路径的优点:normpath(...)

  • 可以使用嵌套的规范路径调用来连接路径,而不必回退到 。/os.path.join(...)
  • 清洁工。
  • 减少打字。
  • 路径更易于阅读(即更具可读性)。
  • 在 Linux 和 Windows 之间移植时出现错误的可能性较小。
  • 更现代。
7赞 Shoaib Muhammad Arif 7/28/2021 #5

Python 原始字符串是通过在字符串文字前加上“r”或“R”来创建的。Python 原始字符串将反斜杠 () 视为文字字符。当我们想要一个包含反斜杠的字符串并且不希望将其视为转义字符时,这很有用。

手动执行,例如:

WindowsPath("C:\meshes\as")

或使用 r 或 R:

WindowsPath(r'C:/meshes/as')