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

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

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

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

模块结构概述

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

  • PurePath:将路径看作字符串,支持路径操作,不关心文件系统的真实状态。
  • PurePosixPathPureWindowsPath:分别用于处理UNIX和Windows路径。
  • Path:结合PurePath的操作,增加了与文件系统交互的功能。
  • PosixPathWindowsPath: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/

你可能感兴趣的文章
Probabilistic-Programming-and-Bayesian-Methods-for-Hackers
查看>>
pytorch中的求和函数sum(axis=x)解释
查看>>
Problem F: 质心算法
查看>>
Problem N HDU 2612 Find a way (两次BFS求最值)
查看>>
Process /usr/libexec/gdu-notification-daemon was killed by signal 6 (SIGABRT)
查看>>
process.env.VUE_APP_BASE_API 获取不到
查看>>
Process.run() 和 Process.start() 之间的区别
查看>>
Processes
查看>>
Processing通过编程实现艺术设计_实现艺术和现实的交互---数据设计分析002
查看>>
ProcessOnLoading
查看>>
SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成
查看>>
PROFINET 模拟器使用教程
查看>>
Program type already present: android.support.v4.widget.EdgeEffectCompat
查看>>
PyTorch中文版官方教程来啦(附下载)
查看>>
Progress Kemp LoadMaster 远程命令执行漏洞复现(CVE-2024-1212)
查看>>
Project configuration is not up-to-date with pom.xml. Run Maven->Update Project
查看>>
Project Euler 15 Lattice paths
查看>>
Project Euler 48 Self powers( 大数求余 )
查看>>
Project Euler Problem 12: Highly divisible triangular number
查看>>
ProjectEuler 2
查看>>