Python内置模块之pathlib详细功能介绍及示例

pathlib 是 Python 3.4+ 引入的用于处理文件系统路径的模块,提供面向对象的路径操作。以下是其核心类 Path 的主要方法及实际示例:


1. 构造路径

  • Path(): 创建路径对象(自动适配操作系统)。
  • / 运算符: 拼接路径。
    from pathlib import Path
    
    # 直接构造路径
    p = Path("/home/user/data")
    
    # 使用运算符拼接
    config_path = Path("config") / "settings.yaml"  # 输出:config/settings.yaml
    

2. 路径属性与检查

  • .exists(): 检查路径是否存在。

  • .is_file() / .is_dir(): 判断是文件还是目录。

  • .name: 文件名(含后缀)。

  • .stem: 文件名(不含后缀)。

  • .suffix: 文件后缀。

  • .parent: 父目录路径。

    file = Path("data/report.txt")
    
    if file.exists():
        print(f"是文件: {file.is_file()}")  # 输出:True
        print(file.name)   # report.txt
        print(file.stem)   # report
        print(file.suffix) # .txt
        print(file.parent) # data
    

3. 文件读写

  • .read_text() / .read_bytes(): 读取文本/二进制内容。
  • .write_text() / .write_bytes(): 写入内容。
    # 读取配置文件
    config = Path("config/settings.json").read_text(encoding="utf-8")
    
    # 写入日志
    log_path = Path("logs/app.log")
    log_path.write_text("2023-10-01 INFO: System started\n", encoding="utf-8")
    

4. 目录操作

  • .mkdir(parents=True, exist_ok=True): 创建目录(自动处理父目录)。
  • .iterdir(): 遍历目录内容。
    # 创建目录(若父目录不存在,自动创建)
    Path("data/raw").mkdir(parents=True, exist_ok=True)
    
    # 遍历目录中的文件
    for child in Path("data").iterdir():
        print(child.name)  # 输出所有子文件和子目录名
    

5. 路径处理

  • .resolve(): 获取绝对路径(解析符号链接)。
  • .with_name() / .with_suffix(): 修改文件名或后缀。
    # 获取绝对路径
    abs_path = Path("data/report.txt").resolve()  # 如 /home/user/data/report.txt
    
    # 修改文件后缀
    new_path = abs_path.with_suffix(".csv")  # report.csv
    

6. 通配符匹配

  • .glob(pattern) / .rglob(pattern): 匹配文件(支持递归)。
    # 查找当前目录下所有 .txt 文件
    for txt_file in Path("data").glob("*.txt"):
        print(txt_file)
    
    # 递归查找所有 .py 文件
    for py_file in Path("src").rglob("*.py"):
        print(py_file)
    

7. 其他实用方法

  • .stat(): 获取文件信息(如大小、修改时间)。

  • .rename(target): 重命名或移动文件。

  • .unlink(): 删除文件。

  • .touch(): 创建空文件。

    # 获取文件信息
    stats = Path("data/report.txt").stat()
    print(f"大小: {stats.st_size} 字节")
    
    # 重命名文件
    Path("old_name.txt").rename("new_name.txt")
    
    # 删除文件
    Path("tmp/temp_file").unlink()
    

实际场景示例

场景:批量修改图片后缀

image_dir = Path("images")
for img in image_dir.glob("*.jpg"):
    new_name = img.with_suffix(".png")
    img.rename(new_name)
    print(f"重命名: {img.name} -> {new_name.name}")

场景:读取 CSV 文件并处理

data_path = Path("data/sales.csv")
if data_path.exists() and data_path.is_file():
    content = data_path.read_text(encoding="utf-8")
    rows = content.splitlines()
    # 进一步处理数据...

总结

pathlib 的优势:

  • 面向对象:路径作为对象操作,代码更直观。
  • 跨平台:自动处理 Windows/Unix 路径差异。
  • 链式调用:支持如 Path("data").joinpath("raw").mkdir() 的简洁写法。

通过结合这些方法,可以高效处理文件系统任务,替代传统的 os.pathos 模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值