当前位置: 首页 > news >正文

Python中os.path和pathlib模块路径操作函数汇总

os.path 是 Python 标准库 os 模块中的一个子模块,专门用于处理文件路径,兼容不同操作系统(如 Windows 的 C:\path 和 Unix 的 /path)。以下是 os.path 中常用的函数汇总,按功能分类,并附有简要说明和示例。


一、路径拼接与构造

函数说明示例
os.path.join(a, b, ...)拼接路径,自动处理分隔符os.path.join('dir', 'file.txt') → 'dir/file.txt'
os.path.abspath(path)获取绝对路径os.path.abspath('file.txt')
os.path.normpath(path)规范路径格式(去掉多余的 ...、重复斜杠)normpath('a//b/../c') → 'a/c'
os.path.expanduser(path)展开 ~ 为用户主目录expanduser('~/file.txt')
os.path.expandvars(path)展开环境变量(如 $HOMEexpandvars('$HOME/file.txt')

二、路径分割与提取

函数说明示例
os.path.split(path)分离路径和文件名split('/a/b/c.txt') → ('/a/b', 'c.txt')
os.path.splitext(path)分离文件名和扩展名splitext('file.txt') → ('file', '.txt')
os.path.basename(path)获取文件名部分basename('/a/b/c.txt') → 'c.txt'
os.path.dirname(path)获取目录名部分dirname('/a/b/c.txt') → '/a/b'

三、路径判断

函数说明示例
os.path.exists(path)路径是否存在exists('file.txt')
os.path.isabs(path)是否为绝对路径isabs('/a/b') → True
os.path.isfile(path)是否为文件isfile('test.txt')
os.path.isdir(path)是否为目录isdir('folder/')
os.path.samefile(p1, p2)两路径是否指向同一文件(需路径存在)samefile('a', './a')

四、文件时间信息

函数说明示例
os.path.getsize(path)获取文件大小(字节)getsize('a.txt') → 1024
os.path.getmtime(path)最后修改时间(Unix 时间戳)getmtime('a.txt')
os.path.getatime(path)最后访问时间getatime('a.txt')
os.path.getctime(path)创建时间(Windows)或 metadata 修改时间(Linux)getctime('a.txt')

五、跨平台小技巧

import os# 推荐用法:构造跨平台路径
path = os.path.join(os.path.expanduser('~'), 'Documents', 'myfile.txt')# 判断路径存在
if os.path.exists(path):print("File exists:", path)

六、示例总结

import ospath = '~/test/myfile.txt'
path = os.path.expanduser(path)                   # 展开用户目录
abs_path = os.path.abspath(path)                  # 转为绝对路径
dir_name = os.path.dirname(abs_path)              # 提取目录名
file_name = os.path.basename(abs_path)            # 提取文件名
name, ext = os.path.splitext(file_name)           # 拆分扩展名
exists = os.path.exists(abs_path)                 # 判断文件是否存在

七、 os.pathpathlib 对照速查表

功能os.path 写法pathlib 写法
导入模块import osfrom pathlib import Path
拼接路径os.path.join(a, b)Path(a) / b
获取绝对路径os.path.abspath(p)Path(p).resolve()
获取规范路径os.path.normpath(p)Path(p).resolve()(近似)
展开 ~os.path.expanduser(p)Path(p).expanduser()
分离路径和文件名os.path.split(p)Path(p).parent, Path(p).name
获取文件名os.path.basename(p)Path(p).name
获取目录名os.path.dirname(p)Path(p).parent
分离扩展名os.path.splitext(p)Path(p).stem, Path(p).suffix
判断是否存在os.path.exists(p)Path(p).exists()
是否为文件os.path.isfile(p)Path(p).is_file()
是否为目录os.path.isdir(p)Path(p).is_dir()
文件大小os.path.getsize(p)Path(p).stat().st_size
修改时间os.path.getmtime(p)Path(p).stat().st_mtime
创建时间os.path.getctime(p)Path(p).stat().st_ctime
访问时间os.path.getatime(p)Path(p).stat().st_atime
遍历目录os.listdir(p)Path(p).iterdir()

八、实用对比示例

原始 os.path 写法:

import ospath = os.path.expanduser('~/Documents/file.txt')
abs_path = os.path.abspath(path)
dir_name = os.path.dirname(abs_path)
file_name = os.path.basename(abs_path)
name, ext = os.path.splitext(file_name)
exists = os.path.exists(abs_path)

现代 pathlib 写法(推荐):

from pathlib import Pathp = Path('~/Documents/file.txt').expanduser()
abs_path = p.resolve()
dir_name = p.parent
file_name = p.name
name = p.stem
ext = p.suffix
exists = p.exists()

九、特别推荐功能(pathlib 专属)

功能示例
遍历某文件夹中所有 .txt 文件list(Path('.').glob('*.txt'))
递归遍历所有文件list(Path('.').rglob('*'))
创建目录(自动递归)Path('a/b/c').mkdir(parents=True, exist_ok=True)
删除文件Path('a.txt').unlink()
移动 / 重命名Path('old.txt').rename('new.txt')
读取文本Path('file.txt').read_text()
写入文本Path('file.txt').write_text("Hello")

http://www.lryc.cn/news/582482.html

相关文章:

  • react的条件渲染【简约风5min】
  • C#使用Semantic Kernel实现Embedding功能
  • 【知足常乐ai笔记】机器人强化学习
  • TVS管工作原理是什么?主要的应用场景都有哪些?
  • MySQL数据库访问(C/C++)
  • 赛博威破解快消品渠道营销三重困局,助力企业实现“活动即战力”
  • 小米YU7预售现象深度解析:智能电动汽车的下一个范式革命
  • 内容页模板表格显示不全的问题处理
  • IP 能ping通,服务器是否开机?
  • 第8章:应用层协议HTTP、SDN软件定义网络、组播技术、QoS
  • 【快手】数据挖掘面试题0002:求某地铁站每日客流量,乘地铁经过、进出站人都包括在内
  • Tourism Management and Technology Economy,旅游管理与技术经济知网期刊
  • Oracle 存储过程、函数与触发器
  • 【OceanBase诊断调优】—— 执行计划显示分区 PARTITIONS[P0SP9] 如何查询是哪个分区?
  • 数据结构与算法:博弈类问题
  • 服务器经常出现蓝屏是什么原因导致的?如何排查和修复?
  • node.js中yarn、npm、cnpm详解
  • npm : 无法加载文件 D:\Node\npm.ps1,因为在此系统上禁止运行脚本。
  • 【QT】-隐式转换 explicit用法
  • React18+TypeScript状态管理最佳实践
  • 说说SpringBoot常用的注解?
  • 【Nginx】Nginx代理WebSocket
  • Ollama+OpenWebUI 0.42+0.3.35 最新版一键安装教程,解决手动更新失败问题
  • kafka如何让消息均匀的写入到每个partition
  • OpenWebUI(5)源码学习-后端socket通信模块
  • App Trace功能实战:一键拉起应用实践
  • 【保姆级图文详解】RAG 实战(Spring AI + 本地知识库)旅游知识库问答
  • 微软上线 Deep Research 预览版:o3+必应赋能研究自动化
  • OGRE 3D----6. 背景图片渲染实现详解
  • 【Unity3D】微信小游戏适配安全区域或胶囊控件(圆圈按钮)水平高度一致方案