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

发布于 2025-01-09 08:24:45 字数 146 浏览 0 评论 0原文

假设我需要引用路径C:\meshes\as。如果我尝试直接编写它,例如 "C:\meshes\as",我会遇到问题 - 要么出现异常,要么路径不起作用。这是因为 \ 充当转义字符吗?路径应该怎么写呢?

Suppose I need to refer to the path C:\meshes\as. If I try writing that directly, like "C:\meshes\as", I encounter problems - either some exception, or the path just doesn't work. Is this because \ is acting as an escape character? How should I write the paths?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

没有你我更好 2025-01-16 08:24:45

您可以使用always:

'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

You can use always:

'C:/mydir'

This works both in Linux and Windows.

Another possibility is:

'C:\\mydir'

If you have problems with some names you can also try raw string literals:

r'C:\mydir'

However, the best practice is to use the os.path module functions that always joins with the correct path separator (os.path.sep) for your OS:

os.path.join(mydir, myfile)

From python 3.4 you can also use the pathlib module. This is equivalent to the above:

pathlib.Path(mydir, myfile)

or:

pathlib.Path(mydir) / myfile
锦爱 2025-01-16 08:24:45

使用 os.path 模块。

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

或者使用原始字符串,

r"C:\meshes\as"

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

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

Use the os.path module.

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

Or use raw strings

r"C:\meshes\as"

I would also recommend no spaces in the path or file names. And you could use double backslashes in your strings.

"C:\\meshes\\as.jpg"
ま柒月 2025-01-16 08:24:45

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

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

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

>>> 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 不会处理以 r< 为前缀的字符串文字中的转义序列/code> 或 R

    <前><代码>>>> r'C:\网格\as'
    'C:\\网格\\为'
    >>>>>打印(r'C:\网格\ as')
    C:\网格\as

  2. Windows 上的 Python 也应该处理正斜杠。

  3. 您可以使用os.path。加入 ...

    <前><代码>>>>导入操作系统
    >>>>> os.path.join('C:', os.sep, '网格', 'as')
    'C:\\网格\\为'

  4. ... 或较新的 pathlib 模块

    <前><代码>>>>从 pathlib 导入路径
    >>>>>路径('C:','/','网格','as')
    WindowsPath('C:/mesh/as')

Yes, \ in Python string literals denotes the start of an escape sequence. In your path you have a valid two-character escape sequence \a, which is collapsed into one character that is ASCII Bell:

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

Other common escape sequences include \t (tab), \n (line feed), \r (carriage return):

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

As you can see, in all these examples the backslash and the next character in the literal were grouped together to form a single character in the final string. The full list of Python's escape sequences is here.

There are a variety of ways to deal with that:

  1. Python will not process escape sequences in string literals prefixed with r or R:

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python on Windows should handle forward slashes, too.

  3. You could use os.path.join ...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ... or the newer pathlib module

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    
巡山小妖精 2025-01-16 08:24:45

使用 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 个月的时间使用os.path.join(...),然后切换到 normpath(...) 最后切换到 Path(...)。在使用了这三个之后,Path 是世界上最好的。

Path 相对于 os.path.join(... )

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

Path 相对于 normpath(...)

  • 可以使用 / 连接路径,而不必回退到 os.path.join(...),并使用嵌套的normpath调用来修复问题。
  • 清洁工。
  • 少打字。
  • 更容易阅读路径(即更具可读性)。
  • 在 Linux 和 Windows 之间移植时出现错误的可能性较小。
  • 更现代。

Use 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 takes a path-like string and adjusts everything for the current OS, either Windows or Linux. For example, on Linux it would convert all backslashes to forward slashes, and on Windows it would do the reverse.

Full article: Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux


My experience:

  • I spent 6 months using os.path.join(...), then switched to normpath(...) then finally switched to Path(...). Having used all three, Path is the best of all worlds.

Advantages of Path over os.path.join(...):

  • Cleaner.
  • Less typing.
  • Easier to read the paths (i.e. more readable).
  • Can join two different paths using / (see above).
  • More modern.

Advantages of Path over normpath(...):

  • Can join paths using / rather than having to fall back to os.path.join(...), with nested normpath calls to fix things up.
  • Cleaner.
  • Less typing.
  • Easier to read the paths (i.e. more readable).
  • Less chance of bugs when porting between Linux and Windows.
  • More modern.
摘星┃星的人 2025-01-16 08:24:45

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

手动执行,例如:

WindowsPath("C:\meshes\as")

或使用 r 或 R:

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

Python raw string is created by prefixing a string literal with ‘r’ or ‘R’. Python raw string treats backslash () as a literal character. This is useful when we want to have a string that contains backslash and don’t want it to be treated as an escape character.

Doing Manually Such as:

WindowsPath("C:\meshes\as")

or by using r or R:

WindowsPath(r'C:/meshes/as')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文