【Python】根据jpg图片名称匹配并复制同名txt文件

目录

一、思路:

二、代码:

三、运行结果:


根据一个文件夹内所有的.jpg格式图片的文件名,在另一个文件夹中寻找同名的.txt文件,然后将找到的.txt文件复制到一个新的文件夹中。

一、思路:

1. 设置三个路径:源图片文件夹、目标txt文件夹、输出文件夹。

2. 创建输出文件夹,如果不存在的话。可以用os.makedirs(),exist_ok=True参数避免重复创建的问题。

3. 获取源文件夹里所有jpg文件的列表。可以用glob.glob('*.jpg')或者os.listdir配合筛选。

4. 遍历每个jpg文件,提取基名。例如,用os.path.splitext来分割文件名和扩展名。

5. 对于每个基名,构造对应的txt文件名,检查目标文件夹是否存在这个txt文件。

6. 如果存在,就复制到输出文件夹里。使用shutil.copy2()可以保留元数据,不过用户可能只需要复制内容,所以copy也可以。

7. 处理异常情况,比如目标文件夹中没有对应的txt文件,这时候可能需要跳过,或者记录错误。

8. 最后可能需要提示用户操作完成,或者输出处理了多少个文件。

二、代码:

# 导入操作系统接口模块(用于文件路径、目录操作)
import os
# 导入高级文件操作模块(用于复制文件)
import shutil
########################################################################《选择复制或剪切》
# 复制(1)操作一
def copy_matching_txts(img_folder, txt_folder, output_folder):
##剪切(1)操作一
#def move_matching_files(img_folder, src_folder, dst_folder):
########################################################################
    """
    根据图片文件夹中的jpg文件匹配并复制同名txt文件到新文件夹
    参数:
        img_folder: 包含jpg图片的源文件夹路径
        txt_folder: 需要查找的txt文件所在文件夹路径
        output_folder: 存放匹配txt文件的新文件夹路径
    """
    # 创建输出目录(exist_ok=True表示如果目录已存在不会报错)
    os.makedirs(output_folder, exist_ok=True)

    # 获取图片目录下所有文件名
    img_files = [f for f in os.listdir(img_folder)
                 # 筛选扩展名为.jpg的文件(不区分大小写)
                 if f.lower().endswith('.jpg')]

    # 使用集合推导式生成不重复的基文件名(去掉.jpg扩展名)
    base_names = {os.path.splitext(f)[0]  # 分割文件名和扩展名,取文件名部分
                  for f in img_files}  # 遍历所有图片文件

    # 初始化成功复制计数器
    copied_count = 0

    # 遍历所有基文件名
    for base in base_names:
########################################################################《修改需要对应图片的文件后缀》
        # 构造对应的txt文件名
        txt_file = f"{base}.txt"
        # 构造对应的json文件名
        #txt_file = f"{base}.json"
########################################################################
        # 拼接完整的源文件路径
        src_path = os.path.join(txt_folder, txt_file)
        # 拼接完整的目标文件路径
        dst_path = os.path.join(output_folder, txt_file)

        # 检查源txt文件是否存在
        if os.path.exists(src_path):
########################################################################《根据前面的选择进行操作》
            # 复制文件(2)操作二
            shutil.copy2(src_path, dst_path)
            # 剪切文件(2)操作二
            #shutil.move(src_path, dst_path)
########################################################################
            # 成功计数加1
            copied_count += 1
            # 打印成功信息
            print(f"成功复制:{txt_file}")
        else:
            # 打印未找到提示
            print(f"未找到:{txt_file}")

    # 打印最终统计结果
    print(f"\n操作完成!共找到并复制 {copied_count} 个txt文件")


# 主程序入口
if __name__ == "__main__":
########################################################################《修改下面的三个路径》
    IMAGE_FOLDER = r"D:\data\person\val"  # 图片目录路径
    TXT_FOLDER = r"D:data\person\newval\json"  # 原始txt文件目录路径
    OUTPUT_FOLDER = r"D:\data\person\newval"  # 输出目录路径
########################################################################
    # 调用核心处理函数
    copy_matching_txts(IMAGE_FOLDER, TXT_FOLDER, OUTPUT_FOLDER)

三、运行结果:

 成功获取到与jpg图片名称对应的txt文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

扶云云

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

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

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

打赏作者

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

抵扣说明:

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

余额充值