写点什么

高效文件处理:Python pathlib 实战指南

  • 2024-12-13
    福建
  • 本文字数:1716 字

    阅读完需:约 6 分钟

在使用Python处理文件路径时,强烈建议使用pathlib


pathlib以面向对象的方式处理文件路径,既避免了很多陷阱,也能使执行许多路径的相关操作变得更容易。


本篇总结了常用的使用pathlib进行文件路径处理的方法。


1. 常用操作


首先介绍如何使用pathlib来完成一些常规的文件路径相关操作。


1.1. 构造路径


构建路径对象,只需要将文件或文件夹路径的字符串传给Path即可。


from pathlib import Path
fp = "D:\\temp\\pathlib"path = Path(fp)path
# path 对象# WindowsPath('D:/temp/pathlib')
复制代码


构造路径对象之后,Path会自动判断出是windows还是linux下的路径。


1.2. 拼接和拆分路径


用字符串来拼接和拆分路径时,最麻烦的就是不同系统中路径分隔符(\ 和 /)的处理。


使用Path对象,能够避免此困扰。


new_path = path.joinpath("abc")new_path# WindowsPath('D:/temp/pathlib/abc')
new_path = Path(fp, "test.py")new_path# WindowsPath('D:/temp/pathlib/test.py')
复制代码


使用joinpath或者直接创建Path对象时拼接路径,不需要指定路径分隔符。


使用Path拆分路径也方便,它提供了多个属性来获取文件信息。


my_path = Path(fp, "program.py")my_path# WindowsPath('D:/temp/pathlib/program.py')
# 文件完整名my_path.name# 'program.py'
# 文件目录my_path.parent# WindowsPath('D:/temp/pathlib')
# 文件名(不带后缀)my_path.stem# 'program'
# 文件后缀名my_path.suffix# '.py'
# 修改文件后缀my_path.with_suffix(".go")# WindowsPath('D:/temp/pathlib/program.go')
复制代码


1.3. 相对路径和绝对路径


相对路径转换为绝对路径,推荐使用Path对象的resolve方法。


path = Path("main.py")path# WindowsPath('main.py')
# 转换为绝对路径path.resolve()# WindowsPath('D:/projects/python/samples/main.py')
复制代码


1.4. 遍历目录


遍历目录也是常用的文件路径操作。


fp = "D:\\temp\\pathlib\\a"path = Path(fp)
for f in path.glob("*.txt"): print(f)
# D:\temp\pathlib\a\1.txt# D:\temp\pathlib\a\2.txt# D:\temp\pathlib\a\3.txt
复制代码


glob函数是只遍历目录下的文件,如果要遍历子目录中的文件,使用rglob函数。


for f in path.rglob("*.txt"):    print(f)
# D:\temp\pathlib\a\1.txt# D:\temp\pathlib\a\2.txt# D:\temp\pathlib\a\3.txt# D:\temp\pathlib\a\sub_a\sub_1.txt
复制代码


1.5. 读写文件


传统的读写文件方式,一般都是两个步骤:先通过 open 函数打开文件,再进行读或者写。


# 写入with open("d:\\readme.txt", "w") as f:    f.write("abcdefg")
# 读取with open("d:\\readme.txt", "r") as f: content = f.read() print(content) # abcdefg
复制代码


使用Path对象,读写操作更加简单,代码也更清晰。


fp = "d:\\readme.txt"path = Path(fp)path.write_text("uvwxyz")
content = path.read_text()print(content)# uvwxyz
复制代码


2. 更方便的操作


除了上面的常用操作,对于下面这些略微复杂文件路径的操作,


使用Path也能更容易的完成。


2.1. 检查文件或目录是否存在


fp = "D:\\temp\\pathlib\\a"path = Path(fp)
path.is_dir() # Truepath.is_file() # Falsepath.exists() # True
复制代码


2.2. 创建目录


创建目录使用Path对象可以帮助我们自动处理异常情况。


path = Path("D:\\temp\\a\\b\\c\\d")path.mkdir(exist_ok=True, parents=True)
复制代码


exist_okparents参数为了创建文件夹时省了很多判断。


exist_ok=True表示如果文件夹 d 存在就不创建,也不报错,反之会报错。


parents=True表示文件夹 d 的上层的各级文件夹如果不存在就自动创建,反之如果文件夹 d 的上层有不存在的文件夹则报错。


2.3. 路径自动规范化


使用Path来操作路径,不用过于关心不同操作系统的路径分割符问题。


windows系统中,也可以使用linux的路径分割符,比如,下面两种方式都可以正常运行。


fp = "D:\\temp\\pathlib\\a"path = Path(fp)
fp = "D:/temp/pathlib/a"path = Path(fp)
复制代码


3. 与 os.path 对比


pathlib主要就是为了取代os.path,它们之间的对比整理如下:



对比两种方式,就能体会 pathlib 的改进带来的好处。


文章转载自:wang_yb

原文链接:https://www.cnblogs.com/wang_yb/p/18602142

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
高效文件处理:Python pathlib实战指南_Python_快乐非自愿限量之名_InfoQ写作社区