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.basenameos.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! ---")

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

结合 mkdiros.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 模块在实际开发中的常见用法。掌握这些函数可以有效简化文件系统相关的代码,并提高跨平台兼容性。

相关推荐
2601_962299243 小时前
Azure python操作系统列表
python·操作系统·azure·虚拟机·存储配置文件
学术 学术 Fun4 小时前
如何用 API 与 Webhook 批量把图表图片转换成 VSDX
python·自动化·api·visio
2601_962100545 小时前
python包和模块的内容整理
python·模块·导入·虚拟环境·
二进制漫游记5 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
-今昭-6 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
2601_962381586 小时前
【转】Python渗透测试工具:sqlmap
python·渗透测试·sql注入·sqlmap·数据库安全
用户3721574261356 小时前
如何使用 Python 从 Word 文档中提取图片
python
白山编程大哥8 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
昭昭日月明9 小时前
RAGFlow 入门,不用从零造轮子
python·ai编程
莓有烦恼吖10 小时前
Vibe Coding 的一些思考
python