日期:
来源:Python架构师收集编辑:点击关注
随着每个 Python 版本的发布,都会添加新模块,并引入新的更好的做事方式,虽然我们都习惯了使用好的旧 Python 库和某些做事方式,但现在也时候升级并利用新的和改进的模块及其特性了。
Pathlib 而不是 OS
pathlib 绝对是 Python 标准库中最近添加的更大的内容之一, 自 Python 3.4 以来,它一直是标准库的一部分,但很多人仍然使用 os 模块进行文件系统操作。
然而,pathlib 与旧的 os.path 相比具有许多优点 - 虽然 os 模块以原始字符串格式表示路径,但 pathlib 使用面向对象的样式,这使得它更具可读性和编写自然:
from pathlib import Pathimport os.path# 老方式two_dirs_up = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 新方式,可读性强two_dirs_up = Path(__file__).resolve().parent.parent
路径被视为对象而不是字符串这一事实也使得可以创建一次对象,然后查找其属性或对其进行操作:
readme = Path("README.md").resolve()print(f"Absolute path: {readme.absolute()}")# Absolute path: /home/martin/some/path/README.mdprint(f"File name: {readme.name}")# File name: README.mdprint(f"Path root: {readme.root}")# Path root: /print(f"Parent directory: {readme.parent}")# Parent directory: /home/martin/some/pathprint(f"File extension: {readme.suffix}")# File extension: .mdprint(f"Is it absolute: {readme.is_absolute()}")# Is it absolute: True
我最喜欢 pathlib 的一个特性是可以使用 /(“除法”)运算符来连接路径:
# Operators:etc = Path('/etc')joined = etc / "cron.d" / "anacron"print(f"Exists? - {joined.exists()}")# Exists? - True
重要的是要注意 pathlib 只是替代 os.path 而不是整个 os 模块, 它还包括 glob 模块的功能,因此如果你习惯于将 os.path 与 glob.glob 结合使用,那么你可以完全用pathlib替代它们。