例如,表示 Windows 目录的最佳方式是什么"C:\meshes\as"
?我一直在尝试修改脚本,但它从不工作,因为我似乎无法正确获取目录,我假设是因为'\'
充当转义字符?
6 回答
您可以始终使用:
'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
使用os.path
模块。
os.path.join( "C:", "meshes", "as" )
或使用原始字符串
r"C:\meshes\as"
我还建议在路径或文件名中不要有空格。您可以在字符串中使用双反斜杠。
"C:\\meshes\\as.jpg"
是的,\
在 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 的转义序列的完整列表在这里。
有多种方法可以解决这个问题:
Python 不会处理以
r
orR
为前缀的字符串文字中的转义序列:>>> 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')
使用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 over 的优点os.path.join(...)
:
- 清洁器。
- 少打字。
- 更容易阅读路径(即更具可读性)。
/
可以使用(见上文)加入两条不同的路径。- 更现代。
path over 的优点normpath(...)
:
- 可以使用嵌套的 normpath 调用来修复问题,
/
而不必回退到连接路径。os.path.join(...)
- 清洁器。
- 少打字。
- 更容易阅读路径(即更具可读性)。
- 在 Linux 和 Windows 之间移植时出现错误的可能性较小。
- 更现代。
Python 原始字符串是通过在字符串文字前加上 'r' 或 'R' 来创建的。Python 原始字符串将反斜杠 () 视为文字字符。当我们想要一个包含反斜杠的字符串并且不希望它被视为转义字符时,这很有用。
手动执行例如:
WindowsPath("C:\meshes\as")
或使用 r 或 R:
WindowsPath(r'C:/meshes/as')
使用 PowerShell
在 Windows 中,只要您使用 PowerShell作为命令行界面,您就可以/
在任何地方像 Linux 或 macOS 一样在您的路径中使用。它预装在 Windows 上,并且支持许多Linux 命令,例如command。ls
如果您使用 Windows 命令提示符(当您cmd
在 Windows 开始菜单中键入时出现的那个),您需要在\
其中指定路径。您可以/
在所有其他地方(代码编辑器、Python 交互模式等)使用路径。