提问人:Gareth 提问时间:6/2/2010 最后编辑:Karl KnechtelGareth 更新时间:11/6/2023 访问量:656385
我应该如何在 Python 字符串文字中编写 Windows 路径?
How should I write a Windows path in a Python string literal?
问:
假设我需要引用路径。如果我尝试直接编写它,例如,我会遇到问题 - 要么是一些异常,要么是路径不起作用。这是因为扮演逃避角色吗?我应该如何编写路径?C:\meshes\as
"C:\meshes\as"
\
答:
使用该模块。os.path
os.path.join( "C:", "meshes", "as" )
或者使用原始字符串
r"C:\meshes\as"
我还建议路径或文件名中不要有空格。你可以在你的字符串中使用双反斜杠。
"C:\\meshes\\as.jpg"
评论
"C:\"
join
"C:\"
os.path.normpath
os.path.join( "C:\\", "meshes", "as" )
您可以始终使用:
'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
评论
是的,在 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 转义序列的完整列表在这里。
有多种方法可以解决这个问题:
Python 不会处理以
r
或R
为前缀的字符串文本中的转义序列:>>> r'C:\meshes\as' 'C:\\meshes\\as' >>> print(r'C:\meshes\as') C:\meshes\as
Windows 上的 Python 也应该处理正斜杠。
你可以使用
os.path.join
...>>> import os >>> os.path.join('C:', os.sep, 'meshes', 'as') 'C:\\meshes\\as'
...或较新的
pathlib
模块>>> from pathlib import Path >>> Path('C:', '/', 'meshes', 'as') WindowsPath('C:/meshes/as')
评论
\U
C:\Users
用: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 之间移植时出现错误的可能性较小。
- 更现代。
Python 原始字符串是通过在字符串文字前加上“r”或“R”来创建的。Python 原始字符串将反斜杠 () 视为文字字符。当我们想要一个包含反斜杠的字符串并且不希望将其视为转义字符时,这很有用。
手动执行,例如:
WindowsPath("C:\meshes\as")
或使用 r 或 R:
WindowsPath(r'C:/meshes/as')
评论