当前位置:嗨网首页>书籍在线阅读

03-Windows操作系统上的倒斜杠以及macOS和Linux操作系统上的正斜杠

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.1.1 Windows操作系统上的倒斜杠以及macOS和Linux操作系统上的正斜杠

在Windows操作系统上,路径书写使用倒斜杠作为文件夹之间的分隔符。但在macOS和Linux操作系统上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统上,在编写Python脚本时,就必须处理这两种情况。

好在用 pathlib 模块的 Path() 函数来做这件事很简单。如果将单个文件和路径上的文件夹名称的字符串传递给它, Path() 就会返回一个文件路径的字符串,包含正确的路径分隔符。在交互式环境中输入以下代码:

>>> from pathlib import Path
>>> Path('spam','bacon','eggs')
WindowsPath('spam/bacon/eggs')
>>> str(Path('spam','bacon','eggs'))
'spam\\bacon\\eggs'

请注意,导入 pathlib 的惯例是运行 from pathlib import Path ,因为不这样做,我们就必须在代码中出现 Path 的所有地方都输入 pathlib.Path 。这种额外的输入不仅麻烦,而且也很多余。

我在Windows操作系统上运行这些交互式环境的例子, Path('spam', 'bacon', 'eggs') 为连接的路径返回一个 WindowsPath ,表示为 WindowsPath('spam/ bacon/eggs') 。尽管Windows操作系统使用了倒斜杠,但 WindowsPath 的表示方法在交互式环境中用正斜杠显示它们,因为开源软件开发者总是比较喜欢使用Linux操作系统。

如果要获取这个路径的简单文本字符串,可以将其传递给 str() 函数,该函数在我们的示例中返回 'spam\\bacon\\eggs' 。(请注意,由于每个倒斜杠都需要用另一个倒斜杠字符进行转义,因此倒斜杠会加倍。)如果在Linux操作系统上调用过此函数,那么 Path() 将返回一个 PosixPath 对象,该对象在传递给 str() 时,会返回 'spam/bacon/eggs' 。(POSIX是针对Linux操作系统这样的类UNIX操作系统的一组标准。)

这些 Path 对象(实际上是 WindowsPathPosixPath 对象,具体取决于你的操作系统)将传入本章介绍的几个与文件相关的函数。例如,以下代码将一些名称从文件名列表连接到文件夹名称的末尾:

>>> from pathlib import Path
>>> myFiles = ['accounts.txt', 'details.csv', 'invite.docx']
>>> for filename in myFiles:
 print(Path(r'C:\Users\Al', filename))
C:\Users\Al\accounts.txt 
C:\Users\Al\details.csv 
C:\Users\Al\invite.docx

在Windows操作系统上,倒斜杠用于分隔目录,因此你不能在文件名中使用它。但是,你可以在macOS和Linux操作系统上的文件名中使用倒斜杠。因此,尽管 Path(r'spam\eggs') 在Windows操作系统上指的是两个单独的文件夹(或文件夹spam中的文件eggs),但在macOS和Linux操作系统上,同样的命令是指一个名为spam\eggs的文件夹(或文件)。因此,在你的Python代码中始终使用正斜杠通常是个好主意(本章的其余部分将继续使用正斜杠)。 pathlib 模块将确保它始终可在所有操作系统上运行。

请注意,Python 3.4引入了 pathlib 来代替旧的 os.path() 函数。Python标准库模块从Python 3.6开始支持它,但是如果你使用的是较老的Python 2版本,建议你使用 pathlib2 ,它在Python 2.7上提供了 pathlib 的功能。附录A包含了利用 pip 安装 pathlib2 的说明。每当我用 pathlib 替换了较旧的 os.path() 函数时,都会做一个简短的说明。你可以在Python的官方网站中查找较早的函数。