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) | 展开环境变量(如 $HOME ) | expandvars('$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.path
与 pathlib
对照速查表
功能 | os.path 写法 | pathlib 写法 |
---|
导入模块 | import os | from 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") |