商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Pythonos.path模块常见用法:路径拼接、目录操作与批量文件处理

Pythonos.path模块常见用法:路径拼接、目录操作与批量文件处理

  发布于2026-07-01 阅读(0)

扫一扫,手机访问

在日常 Python 开发中,文件和目录操作可以说是家常便饭。只要和文件系统打交道,os.path 模块几乎就是绕不开的工具箱。它最大的好处是跨平台,不用操心 Windows 和 Linux 下路径分隔符的差异。下面直接用实例来拆解它的核心用法,看看在路径拼接、目录创建、文件批量复制与重命名这些场景下,到底怎么用才顺手。

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

语法其实很简单:

os.path.join(path1[, path2[, ...]])

返回值就是把多个路径拼成一个完整的字符串。

这里有一个特别容易踩的坑:第一个绝对路径之前的参数会被直接忽略。什么意思呢?看个例子:

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 就能搞定:

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 更方便:

parts = os.path.split('/home/user/data/file.txt')
# ('/home/user/data', 'file.txt')

返回的是一个元组,前半部分是目录,后半部分是文件名。

三、安全创建目录

写脚本时经常需要创建一个不存在的目录。最稳妥的做法是先判断,再创建,而且最好支持多级目录。一个典型的工具函数长这样:

def mkdir(path):
    if not os.path.exists(path):
        os.makedirs(path)
        print("--- create new folder %s ---" % path)
    else:
        print("--- already ha ve this folder! ---")

注意这里用的是 os.makedirs,它会递归创建所有不存在的父目录,比 os.mkdir 省心得多。

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

有些场景下,我们不光要创建目录,还要在目录里生成一个空文件。把刚才的 mkdiros.path.split 结合起来,就是一个很实用的组合拳:

def create_empty_file(path):
    dir, file = os.path.split(path)
    mkdir(dir)
    open(path, "w").close()

这样一来,无论传入什么路径,父目录都会自动建立好,文件也能顺利创建。

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

假设有一个源目录,里里外外有很多子文件夹,你想把所有 .jpg 和 .png 图片都复制到一个统一的目标目录里。用 os.walk 配合 shutil.copy 就能做到:

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)

os.walk 会递归遍历所有子目录,root 是当前所在的目录,files 是该目录下的文件列表。判断文件扩展名时直接用切片取后三个字符,简单高效。当然,如果扩展名不统一,也可以用 os.path.splitext 更精确地匹配。

六、批量重命名文件

重命名文件是文件操作里的高频场景。比如,有一批 .gtc 文件,需要根据一个映射字典把文件名改成对应的 vcf 文件名。代码可以这样写:

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)

核心思路是:先遍历目录下所有文件,过滤出目标后缀,然后用字典映射构建新的文件名,最后用 os.rename 完成操作。打印出前后对比,方便检查结果。

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

在脚本中定位路径时,经常需要知道当前脚本所在的目录,或者返回到上一级、上两级目录。几种常见写法如下:

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.getcwd() 返回的是当前工作目录,而 __file__ 是脚本文件本身所在的路径。两者有时并不一致,需要区分使用。获取上级目录时,用 os.path.join 拼接 ".." 是最直观的做法。

八、常用 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 模块在实际开发中最常见的用法。掌握好它们,你会发现文件系统相关的代码写起来顺手得多,而且跨平台兼容性也不用额外操心。

本文转载于:https://www.jb51.net/python/364142z4h.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注