当前位置: 首页 > news >正文

实用工具:基于Python的图片定位导出小程序

实用工具:基于Python的图片定位导出小程序

在日常工作中,我们经常需要从大量图片文件中筛选出包含特定名称或编号的图片,比如从一批产品图片中找出特定型号的图片,或者从系列照片中提取特定编号的照片。手动查找不仅效率低下,还容易出错。今天我要分享一个自己开发的图片定位导出小程序,它能帮助你快速筛选并复制所需的图片文件。
在这里插入图片描述

工具功能介绍

这个图片定位导出工具具有以下特点:

  • 图形化界面操作,简单易用
  • 支持批量输入多个搜索关键词(每行一个)
  • 精确匹配图片文件名,避免部分匹配的误判
  • 自动创建目标文件夹并复制匹配的图片
  • 详细的结果反馈,包括成功复制的文件、未找到的关键词以及找到多个匹配的关键词
  • 支持多种图片格式(jpg、jpeg、png、gif、bmp、tiff、webp)
    在这里插入图片描述

核心技术实现

开发环境

  • Python 3.x
  • 依赖库:tkinter(用于GUI)、os(文件操作)、shutil(文件复制)、re(正则表达式)

核心代码解析

1. 图片复制功能实现

核心函数copy_images负责处理图片的查找和复制逻辑:

def copy_images(search_terms, source_dir=None, target_dir=None):"""复制包含指定名称的图片文件"""# 处理目录默认值if not source_dir:source_dir = os.getcwd()if not target_dir:target_dir = os.path.join(source_dir, "筛选出的图片")# 确保目标文件夹存在if not os.path.exists(target_dir):os.makedirs(target_dir)# 定义图片文件扩展名image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp')# 统计和跟踪变量copied_count = 0copied_files = []term_matches = {term.strip(): [] for term in search_terms if term.strip()}not_found_terms = []multiple_matches_terms = {}# 导入正则表达式模块import re# 遍历源目录中的所有文件for filename in os.listdir(source_dir):# 检查是否是图片文件if filename.lower().endswith(image_extensions):# 检查文件名是否包含任何搜索词for term in search_terms:term = term.strip()if term:file_base = os.path.splitext(filename)[0]  # 获取不带扩展名的文件名# 精确匹配逻辑is_match = Falseif term == file_base:  # 完全匹配文件名is_match = Trueelif term in re.findall(r'\d+', file_base):  # 精确匹配文件名中的某个数字部分is_match = Trueelif f"{term}-" in filename or f"-{term}." in filename:  # 匹配特定格式is_match = Trueif is_match:# 记录匹配信息term_matches[term].append(filename)# 复制文件source_path = os.path.join(source_dir, filename)target_path = os.path.join(target_dir, filename)shutil.copy2(source_path, target_path)  # 保留文件元数据copied_count += 1if filename not in copied_files:copied_files.append(filename)# 处理匹配结果for term, matches in term_matches.items():if not matches:not_found_terms.append(term)elif len(matches) > 1:multiple_matches_terms[term] = matchesreturn copied_count, copied_files, target_dir, not_found_terms, multiple_matches_terms

这个函数的关键在于精确匹配逻辑,通过三种方式确保匹配准确性:

  • 完全匹配文件名(不含扩展名)
  • 精确匹配文件名中的数字部分(避免14匹配到140)
  • 匹配特定格式(如"term-“或”-term."的形式)
2. GUI界面实现

使用Tkinter创建图形化界面,让操作更加直观:

class ImageCopyApp:def __init__(self, root):self.root = rootself.root.title("图片复制工具")self.root.geometry("600x500")self.root.resizable(True, True)# 创建界面元素main_frame = tk.Frame(root, padx=10, pady=10)main_frame.pack(fill=tk.BOTH, expand=True)# 说明标签instruction_label = tk.Label(main_frame, text="请输入要查找的图片名称序列,每行一个。程序将复制包含这些名称的图片到新文件夹。\n如果输入的名称没有找到匹配,或者找到多个匹配结果,将会在结果中提示。",wraplength=580, justify="left",pady=10,font=("SimHei", 10))instruction_label.pack(fill=tk.X)# 输入框self.input_frame = tk.Frame(main_frame)self.input_frame.pack(fill=tk.BOTH, expand=True)self.search_text = scrolledtext.ScrolledText(self.input_frame, height=10)self.search_text.pack(fill=tk.BOTH, expand=True, pady=5)self.search_text.insert(tk.END, "XS977-14\nXS977-25\nXS977-26")  # 默认示例# 按钮button_frame = tk.Frame(main_frame)button_frame.pack(fill=tk.X, pady=10)self.copy_button = tk.Button(button_frame, text="复制图片", command=self.copy_images,width=15,height=2)self.copy_button.pack(side=tk.LEFT, padx=5)# 结果显示result_label = tk.Label(main_frame, text="操作结果:")result_label.pack(anchor=tk.W)self.result_text = scrolledtext.ScrolledText(main_frame, height=10)self.result_text.pack(fill=tk.BOTH, expand=True, pady=5)self.result_text.config(state=tk.DISABLED)

界面设计遵循简洁实用原则,主要包含三个部分:操作说明、关键词输入区和结果显示区。

3. 结果处理与反馈

程序会提供详细的操作结果反馈,包括:

  • 成功复制的文件数量和目标路径
  • 已复制的文件列表
  • 未找到匹配的搜索词
  • 找到多个匹配的搜索词及其匹配结果
    在这里插入图片描述
    如果哪个有问题 会做出提示

使用方法

  1. 运行程序,界面将显示一个文本输入框和操作按钮
  2. 在输入框中每行输入一个要查找的图片名称或编号(支持示例中的格式)
  3. 点击"复制图片"按钮
  4. 程序会在当前目录创建"筛选出的图片"文件夹,并将匹配的图片复制到该文件夹
  5. 操作结果会显示在下方的结果区域,包括成功复制的文件、未找到的关键词等信息

适用场景

  • 摄影师筛选特定编号的照片
  • 设计师整理系列设计图
  • 电商从业者提取特定产品图片
  • 任何需要从大量图片中筛选特定文件的场景

程序已经打包 即使电脑没有安装python也可以使用

http://www.dtcms.com/a/392105.html

相关文章:

  • 滚珠螺杆在工业机器人关节与线性模组的智能控制
  • 【AI】coze的简单入门构建智能体
  • Python数据分析:函数定义时的装饰器,好甜的语法糖。
  • Java数据结构——包装类和泛型
  • 【C++进阶】C++11的新特性 | 列表初始化 | 可变模板参数 | 新的类功能
  • 广东省省考备考(第一百零三天9.20)——言语(强化训练)
  • 面试编程题(四)
  • OpenHarmony之充电振动定制
  • 前端单元测试入门:使用 Vitest + Vue 测试组件逻辑与交互
  • 泛英国生物样本库全基因组关联分析
  • 【LeetCode 每日一题】2785. 将字符串中的元音字母排序
  • 游戏开发中的友好提示,错误信息,异常描述等数据管理的必要性
  • 总线协议(Bus Protocol)如何支持总线错误条件?
  • simuilink 中的引用模型(reference model)的作用? 它和子系统的区别? 如何生成引用模型?
  • HTML+JS实现table表格和鼠标移入移出效果
  • windows11用Qt6自带的mingw编译OSGEarth(自用记录)
  • 仓颉编程语言青少年基础教程:泛型(Generic)和区间(Range)类型
  • 原码反码补码------相关理解
  • 【Python】字典
  • 玩转deepseek之海报生成器
  • C++强制类型转换和I/O流深度解析
  • Transformer 和 MoE
  • Python基础 7》数据类型_元组(Tuple)
  • AI大模型入门第四篇:借助RAG实现精准用例自动生成!
  • leetcode 198 打家劫舍问题,两个dp数组->一个dp数组
  • 嵌入式ARM架构学习8——串口
  • Motion-sensor基础应用
  • 今日行情明日机会——20250919
  • 跟着Carl学算法--动态规划【7】
  • T拓扑结构的特性