Python脚本—批量复制图片

在处理大量图片文件时,手动操作既耗时又容易出错。幸运的是,Python提供了强大的标准库,可以帮助我们轻松地实现文件的批量操作。本文将详细介绍如何使用glob、shutil和os库,实现图片的批量复制。

一、前言

在数据处理、机器学习和计算机视觉等领域,经常需要对大量的图片文件进行操作,如复制、移动、重命名等。高效地处理这些文件,对于提高工作效率至关重要。

二、涉及的Python库简介

  1. glob库
    glob模块用于查找符合特定规则的文件路径名。它支持Unix风格的路径名模式匹配,可用于批量获取指定类型的文件列表。

常用通配符:

*:匹配0个或多个字符
?:匹配1个字符
[]:匹配指定范围内的字符,如[0-9]

  1. shutil库
    shutil模块提供了高级的文件操作功能,如复制、移动、压缩和解压缩等。

shutil.copy(src, dst):将文件从src复制到dst,如果dst是一个目录,则将文件复制到该目录下。

  1. os库
    os模块提供了与操作系统进行交互的功能,如文件和目录的创建、删除、遍历等。

os.listdir(path):返回指定路径下的文件和目录列表。
os.path.join(path, *paths):将多个路径组合后返回。

三、代码实现

下面是使用glob、shutil和os库实现图片批量复制的代码示例。

import os
import shutil

def copy_images(src_dir, dst_dir, image_formats=('jpg', 'png', 'jpeg', 'bmp', 'gif')):
    """
    将源目录中的所有图片文件复制到目标目录。

    :param src_dir: 源目录路径
    :param dst_dir: 目标目录路径
    :param image_formats: 要复制的图片文件格式,默认包含常见格式
    """
    # 确保目标目录存在
    if not os.path.exists(dst_dir):
        os.makedirs(dst_dir)
        print(f"目标目录 {dst_dir} 已创建。")

    # 遍历源目录中的所有文件
    for root, dirs, files in os.walk(src_dir):
        for file in files:
            # 检查文件扩展名是否在指定的图片格式中
            if file.lower().endswith(image_formats):
                src_file = os.path.join(root, file)
                dst_file = os.path.join(dst_dir, file)
                try:
                    shutil.copy2(src_file, dst_file)
                    print(f"已复制 {src_file}{dst_file}")
                except Exception as e:
                    print(f"复制文件 {src_file} 时出错:{e}")

if __name__ == "__main__":
    source_directory = r'D:\biyesheji\VOC2012\SegmentationClass'  # 源目录
    destination_directory = r'D:\biyesheji\VOC2012\test'         # 目标目录

    copy_images(source_directory, destination_directory)

代码解释
函数定义:定义了copy_images函数,用于将指定格式的图片从源目录复制到目标目录。
目标目录检查:使用os.path.exists检查目标目录是否存在,如果不存在则使用os.makedirs创建。
遍历源目录:使用os.walk遍历源目录下的所有文件和子目录。
文件格式检查:通过str.endswith方法,筛选出指定格式的图片文件。
文件复制:使用shutil.copy2方法,复制文件并保留元数据(如修改时间)。
异常处理:在复制过程中捕获可能的异常,并打印错误信息。

四、总结

本文介绍了如何使用Python的glob、shutil和os库,实现图片的批量复制。通过对代码的详细讲解和优化,我们不仅实现了基本的复制功能,还提高了代码的健壮性和执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值