【发布时间】:2022-01-19 07:39:49
【问题描述】:
表示 Windows 目录(例如 "C:\meshes\as")的最佳方式是什么?我一直在尝试修改脚本,但它从来没有工作,因为我似乎无法正确获取目录,我认为是因为 '\' 充当转义字符?
【问题讨论】:
标签: python path string-literals
表示 Windows 目录(例如 "C:\meshes\as")的最佳方式是什么?我一直在尝试修改脚本,但它从来没有工作,因为我似乎无法正确获取目录,我认为是因为 '\' 充当转义字符?
【问题讨论】:
标签: python path string-literals
使用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.join(mydir, myfile)
从 python 3.4 开始,您还可以使用 pathlib 模块。这相当于上面的:
pathlib.Path(mydir, myfile)
或
pathlib.Path(mydir) / myfile
【讨论】:
是的,Python 字符串文字中的\ 表示转义序列的开始。在您的路径中,您有一个有效的两字符转义序列\a,它被折叠成一个字符,即ASCII Bell:
>>> '\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 的转义序列的完整列表是here。
有多种方法可以解决这个问题:
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
Windows 上的 Python 也应该处理正斜杠。
你可以使用os.path.join ...
>>> import os
>>> os.path.join('C:', os.sep, 'meshes', 'as')
'C:\\meshes\\as'
...或更新的pathlib module
>>> from pathlib import Path
>>> Path('C:', '/', 'meshes', 'as')
WindowsPath('C:/meshes/as')
【讨论】:
在 Windows 中,您可以在路径中使用 /,就像在任何地方使用 Linux 或 macOS 一样只要您使用 PowerShell 作为命令行界面。它在 Windows 上预安装,并且支持许多 Linux 命令,例如 ls 命令。
如果您使用 Windows 命令提示符(当您在 Windows 开始菜单中键入 cmd 时出现的提示符),您需要在其中指定带有 \ 的路径。您可以在所有其他地方(代码编辑器、Python 交互模式等)使用/ 路径。
【讨论】:
使用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 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux
我的经验:
os.path.join(...),然后切换到normpath(...),最后切换到Path(...)。 Path 使用了这三者,是世界上最好的。Path 相对于os.path.join(...) 的优势:
/ 加入两条不同的路径(见上文)。路径优于normpath(...):
/ 加入路径,而不必回退到os.path.join(...),通过嵌套的 normpath 调用来解决问题。【讨论】:
Python 原始字符串是通过在字符串文字前加上“r”或“R”来创建的。 Python 原始字符串将反斜杠 () 视为文字字符。当我们想要一个包含反斜杠的字符串并且不希望它被视为转义字符时,这很有用。
手动操作如:
WindowsPath("C:\meshes\as")
或使用 r 或 R:
WindowsPath(r'C:/meshes/as')
【讨论】: