在日常工作中,我们经常需要从大量图片文件中筛选出包含特定名称或编号的图片,比如从一批产品图片中找出特定型号的图片,或者从系列照片中提取特定编号的照片。手动查找不仅效率低下,还容易出错。今天我要分享一个自己开发的图片定位导出小程序,它能帮助你快速筛选并复制所需的图片文件。
工具功能介绍
这个图片定位导出工具具有以下特点:
- 图形化界面操作,简单易用
- 支持批量输入多个搜索关键词(每行一个)
- 精确匹配图片文件名,避免部分匹配的误判
- 自动创建目标文件夹并复制匹配的图片
- 详细的结果反馈,包括成功复制的文件、未找到的关键词以及找到多个匹配的关键词
- 支持多种图片格式(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 = 0 copied_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 = false if term == file_base: # 完全匹配文件名 is_match = true elif term in re.findall(r'\d+', file_base): # 精确匹配文件名中的某个数字部分 is_match = true elif f"{term}-" in filename or f"-{term}." in filename: # 匹配特定格式 is_match = true if 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 += 1 if 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] = matches return 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 = root self.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. 结果处理与反馈
程序会提供详细的操作结果反馈,包括:
- 成功复制的文件数量和目标路径
- 已复制的文件列表
- 未找到匹配的搜索词
- 找到多个匹配的搜索词及其匹配结果
如果哪个有问题 会做出提示
使用方法
运行程序,界面将显示一个文本输入框和操作按钮
在输入框中每行输入一个要查找的图片名称或编号(支持示例中的格式)
点击"复制图片"按钮
程序会在当前目录创建"筛选出的图片"文件夹,并将匹配的图片复制到该文件夹
操作结果会显示在下方的结果区域,包括成功复制的文件、未找到的关键词等信息
适用场景
- 摄影师筛选特定编号的照片
- 设计师整理系列设计图
- 电商从业者提取特定产品图片
- 任何需要从大量图片中筛选特定文件的场景
程序已经打包 即使电脑没有安装python也可以使用
到此这篇关于基于python开发简单的图片定位导出小程序的文章就介绍到这了,更多相关python图片定位导出内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论