Python os.path 模块详解:路径拼接、目录操作与批量文件处理

在日常 Python 开发中,文件和目录操作非常频繁。os.path 模块提供了跨平台处理路径的基础功能。本文通过实例说明其核心用法,包括路径拼接、目录创建、文件批量复制与重命名等。

一、路径拼接:os.path.join()

语法:

python 复制代码
os.path.join(path1[, path2[, ...]])

返回值:多个路径拼接后的字符串。

注意:第一个绝对路径之前的参数会被忽略。

示例:

python 复制代码
import os

# 全部相对路径
print(os.path.join('/hello/', 'good/boy/', 'doiido'))
# 输出:/hello/good/boy/doiido

# 中间出现绝对路径
print(os.path.join('/hello/', '/good/boy/', 'doiido'))
# 输出:/good/boy/doiido   (/hello/ 被忽略)

这一特性在拼接用户输入或配置路径时需要留意。

二、分离文件名和路径

使用 os.path.basename 和 os.path.dirname:

python 复制代码
url = 'https://images0.cnblogs.com/i/311516/201403/020013141657112.png'
filename = os.path.basename(url)   # '020013141657112.png'
filepath = os.path.dirname(url)    # 'https://images0.cnblogs.com/i/311516/201403'

使用 os.path.split 同时获得两者:

python 复制代码
parts = os.path.split('/home/user/data/file.txt')
# ('/home/user/data', 'file.txt')

三、安全创建目录

先判断目录是否存在,再创建(支持多级目录):

python 复制代码
def mkdir(path):
    if not os.path.exists(path):
        os.makedirs(path)
        print("--- create new folder %s ---" % path)
    else:
        print("--- already have this folder! ---")

四、创建空文件并自动创建父目录

结合 mkdir 和 os.path.split:

python 复制代码
def create_empty_file(path):
    dir, file = os.path.split(path)
    mkdir(dir)
    open(path, "w").close()

五、批量复制特定类型文件

递归遍历源目录,将指定扩展名的文件复制到目标目录:

python 复制代码
import shutil

def cp_rawdata_snp_2_plate_snp_path(path, new_path):
    for root, dirs, files in os.walk(path):
        for file in files:
            if file[-3:].lower() in ('jpg', 'png'):
                src = os.path.join(root, file)
                dst = os.path.join(new_path, file)
                shutil.copy(src, dst)

六、批量重命名文件

根据映射字典修改文件名:

python 复制代码
def rename_gtc_barcode():
    barcode_map = {"2012333_r1l2": "111-1214-1232"}
    gtc_path = config["dir.gtc_dir_path"]
    for i in os.listdir(gtc_path):
        if not i.endswith(".gtc"):
            continue
        oldname = os.path.join(gtc_path, i)
        newname = os.path.join(gtc_path, barcode_map[i.replace(".gtc", "")] + ".vcf")
        os.rename(oldname, newname)
        print(oldname, '======>', newname)

七、获取当前目录、上级目录等

python 复制代码
import os

# 当前目录
print(os.getcwd())
print(os.path.abspath(os.path.dirname(__file__)))

# 上级目录
print(os.path.abspath(os.path.dirname(os.getcwd())))
print(os.path.abspath(os.path.join(os.getcwd(), "..")))

# 上上级目录
print(os.path.abspath(os.path.join(os.getcwd(), "../..")))

八、常用 os.path 方法速查

方法 说明
os.path.abspath(path) 返回绝对路径
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回目录路径
os.path.exists(path) 路径是否存在
os.path.isfile(path) 是否为文件
os.path.isdir(path) 是否为目录
os.path.getsize(path) 文件大小(字节)
os.path.splitext(path) 分离文件名与扩展名

九、注意事项

  1. 路径分隔符 :Windows 为 \,Linux/macOS 为 /,应始终使用 os.path.join 拼接。
  2. 相对/绝对路径 :不确定时先用 os.path.abspath 转换。
  3. 操作前检查 :删除或修改文件前建议用 os.path.exists 判断。

以上是 os.path 模块在实际开发中的常见用法。掌握这些函数可以有效简化文件系统相关的代码,并提高跨平台兼容性。

相关推荐
江湖中的阿龙1 小时前
AI Agent 调用工具怎么做才稳?参数校验、幂等与审计的 Python 实战
人工智能·python·ai agent·工具调用
破茧蝴蝶1 小时前
Selenium4 Python 页面白屏监控方案
开发语言·python
y = xⁿ1 小时前
分享一下自己总结的RAG评测流程
人工智能·python
全栈弄潮儿1 小时前
Python实战第6期:列表与元组
后端·python·编程语言
日耗10亿Token被老板赶出门1 小时前
大模型接口返回 200,为什么程序还是报错?
python
小小张说故事1 小时前
Python 的 __new__ 到底管什么?和 __init__ 的分工一次讲透Python后端python知识整理日新计划
python
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:并查集连通块与朋友圈问题解析
c++·python·算法·bfs·信息学竞赛
外收内放2 小时前
数据分析(数据排序)
python·学习·数据分析
Pniubi2 小时前
agent处理封号怎么解决误封问题
开发语言·python
小羊没烦恼!2 小时前
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
前端·数据库·后端·python·web安全·oracle