博客
关于我
抛弃os.path,拥抱pathlib
阅读量:418 次
发布时间:2019-03-06

本文共 2017 字,大约阅读时间需要 6 分钟。

基于Python的文件、目录和路径操作

在Python中,处理文件、目录和路径操作时,os.path模块是常用的工具。然而,pathlib模块作为os.path的替代品,提供了更便捷的API,适合编程习惯的需求。pathlib模块通过对路径进行对象化,使得操作更加直观和高效。

模块结构概述

pathlib模块的核心在于6个类,这些类的基类是PurePath,其他5个类都是从它继承而来:

  • PurePath:将路径看作字符串,支持路径操作,不关心文件系统的真实状态。
  • PurePosixPath和PureWindowsPath:分别用于处理UNIX和Windows路径。
  • Path:结合PurePath的操作,增加了与文件系统交互的功能。
  • PosixPath和WindowsPath:Path的子类,分别处理UNIX和Windows路径。

PurePath类

PurePath类适用于不需要与真实文件系统交互的场景:

构造方法

  • 多个参数拼接:支持拼接多个路径字符串,适配当前操作系统。
    PurePath('https:', 'www.example.com', 'path') # 返回适配当前系统的路径
  • 默认参数:未传入参数时,默认传入.(当前路径)。
    PurePath() == PurePath('.') # True
  • 处理多个根路径:多个根路径中,只有最后一个生效。
    PurePath('C:/', 'D:/', 'file.txt') # 返回D:\file.txt

特性和方法

  • 路径分解:parts属性返回路径分解后的元组,drive返回驱动器,root返回根路径。
  • 文件信息:anchor返回盘符和根路径,parents返回所有父目录。
  • 文件操作:parent返回上一级目录,name返回文件名,suffix返回文件后缀。
  • 转换方法:as_posix()转换为UNIX路径,as_uri()转换为URL。
  • 路径操作:joinpath()拼接路径,match()判断匹配,relative_to()去除基准路径。
  • 文件管理:with_name()替换文件名,with_suffix()替换后缀。

Path类

在大多数情况下,Path类是首选。Path继承自PurePath,增加了与文件系统交互的功能:

基本使用

  • 创建实例:
    Path('a/b/c/d') # WindowsPath('a/b/c/d')Path('/etc') # WindowsPath('/etc')Path() # WindowsPath('.')
  • 当前工作目录:
    Path.cwd() # 返回当前工作目录Path.home() # 返回用户主目录

目录操作

  • 创建目录:
    Path('d:/test/11').mkdir(exist_ok=True)Path('d:/test/11/22').mkdir(parents=True, exist_ok=True)
  • 删除目录:rmdir()删除空目录。
  • 遍历目录:
    Path('d:/test').iterdir() # 类似os.listdirPath('d:/test').rglob('*') # 类似os.walk

文件操作

  • 创建文件:
    Path('d:/test/11/22/test.py').touch()
  • 文件读写:
    with Path('C:/Users/Administrator/Desktop/text.txt').open('r', encoding='utf-8') as f:    print(f.readline())
  • 文件信息:stat()获取文件详细信息。
  • 文件读写:支持open()、read_bytes()、write_bytes()等方法。

判断操作

  • 文件类型:is_dir()、is_file()、is_symlink()等。
  • 路径属性:is_absolute()判断是否为绝对路径。

路径拼接和分解

  • 拼接:通过/操作符拼接路径。
    Path('a') / Path('b') # Path('a/b')'b' / Path('a') / 'c' # Path('b/a/c')
  • 分解:parts属性返回路径分解结果。

通配符

  • 匹配文件:glob()和rglob()方法支持通配符。
    Path('d:/vue_learn').glob('*.html') # 匹配所有HTML文件

正则匹配

  • 模式匹配:match()方法支持正则表达式。
    Path('C:/Users/Administrator/Desktop/text.txt').match('*.txt') # True

本文全面介绍了Python pathlib模块的使用方法,涵盖了PurePath类和Path类的核心功能和操作示例。通过这些方法,开发者可以更高效地处理文件、目录和路径操作。

转载地址:http://oxyuz.baihongyu.com/

你可能感兴趣的文章
Python:如果DataFrames之间的其他值匹配,则对DataFrame中的值求和
查看>>
Python:字典思维
查看>>
Python:将 HEX 字符串转换为字节
查看>>
Python:将列表与范围列表合并
查看>>
Python:将列表列表初始化为一定大小,
查看>>
Python:带有生成器的给定集合的幂集
查看>>
Python:按字符的位置拆分字符串
查看>>
Python:替换嵌套字典中的值
查看>>
Python:爬取数据出现response.status_code为403解决方法
查看>>
Python:爬取数据出现response.status_code为418解决方法
查看>>
Python:生成“元组集“;来自“元组列表“;不考虑顺序
查看>>
Python:生成具有趋势的随机时间序列数据(例如周期性、指数衰减等)
查看>>
Python:用渐进式数字重命名列表中的重复项而不对列表进行排序
查看>>
Python:矩形参数无效
查看>>
Python:语法进阶
查看>>
Python:调用复制函数时调用 Python 对象时超出了最大递归深度
查看>>
Python:这两个 import 语句有什么区别?
查看>>
Python:通过串口从 Velleman k8090 读取数据
查看>>
python:遍历具有列表值的字典
查看>>
Python:降低精度 pandas 时间戳数据帧
查看>>