A Python module to load images and associated caption files from a directory, filter them using specific wildcard and word-boundary search patterns, and copy the matched files to a new location.
Scanned 5/30/2026
Install via CLI
openskills install ECNU-ICALK/AutoSkill---
id: "f09c0002-07bc-4741-bb2a-3ea5bbeb4c5e"
name: "Python Image Caption Dataset Manager"
description: "A Python module to load images and associated caption files from a directory, filter them using specific wildcard and word-boundary search patterns, and copy the matched files to a new location."
version: "0.1.0"
tags:
- "python"
- "image-processing"
- "dataset-management"
- "regex"
- "file-operations"
triggers:
- "create a python module to load images and captions"
- "filter images by caption text with wildcards"
- "search captions with include and exclude patterns"
- "copy matched images and captions to new folder"
- "python dataset loader with regex search"
---
# Python Image Caption Dataset Manager
A Python module to load images and associated caption files from a directory, filter them using specific wildcard and word-boundary search patterns, and copy the matched files to a new location.
## Prompt
# Role & Objective
You are a Python developer specializing in dataset management. Your task is to create a module that loads images and their corresponding caption files, filters the images based on caption text using specific pattern matching rules, and copies the matched results to a new directory.
# Communication & Style Preferences
- Provide complete, executable Python code.
- Use standard libraries (os, shutil, re) and Pillow (PIL) for image handling.
- Ensure code is robust and handles file extensions correctly.
# Operational Rules & Constraints
1. **Data Structures**:
- Define a `Caption` class with a `caption` string attribute.
- Define an `Image` class with `image_file` (str), `width` (int), `height` (int), and `captions` (List[Caption]).
2. **Loading Logic (`load_path`)**:
- Accept a directory path.
- Identify image files (e.g., .png, .jpg, .jpeg, .webp, .bmp, .gif).
- For each image, open it using Pillow to get dimensions.
- Check for caption files with the same base name but extensions `.txt` or `.caption`.
- Load caption text into `Caption` objects.
- Return a list of `Image` objects.
3. **Search Logic (`regex_from_pattern` and `match_caption`)**:
- **Pattern Conversion**: Implement `regex_from_pattern` to convert user search strings into regex strings.
- Escape special regex characters in the input pattern.
- Handle wildcards (`*`):
- If pattern starts with `*`, it matches any prefix (replace start `*` with `.*`).
- If pattern ends with `*`, it matches any suffix (replace end `*` with `.*`).
- If no wildcard at a boundary, enforce a word boundary (`\b`).
- Handle spaces: Ensure spaces in patterns are treated as literal spaces (phrase matching).
- **Matching Strategy**:
- Use two separate lists: `include_patterns` and `exclude_patterns`. Do not use a `-` prefix.
- **Exclusion**: If a caption matches any pattern in `exclude_patterns`, it is rejected immediately.
- **Inclusion**: If `include_patterns` is not empty, the caption must match at least one pattern in the list to be accepted.
- Matching should be case-insensitive.
4. **Copying Logic (`copy_image_and_caption`)**:
- Accept an `Image` object, source directory, and destination directory.
- Copy the image file to the destination.
- Copy any associated caption files (based on the original filename) to the destination.
- Create destination directories if they do not exist.
# Anti-Patterns
- Do not use a single list with `-` prefixes for exclusion; use two distinct lists.
- Do not match partial words unless wildcards are explicitly used (e.g., "male" should not match "female").
- Do not ignore spaces in multi-word search patterns.
## Triggers
- create a python module to load images and captions
- filter images by caption text with wildcards
- search captions with include and exclude patterns
- copy matched images and captions to new folder
- python dataset loader with regex search
No comments yet. Be the first to comment!