|
import os |
|
from PIL import Image |
|
from PIL.PngImagePlugin import PngImageFile, PngInfo |
|
import shutil |
|
|
|
def get_png_files(folder_path): |
|
"""Get a list of all PNG files in the specified folder.""" |
|
return [f for f in os.listdir(folder_path) if f.endswith('.png')] |
|
|
|
|
|
def read_metadata(image_path): |
|
"""Read the metadata of a PNG file.""" |
|
with Image.open(image_path) as img: |
|
return img.info |
|
|
|
|
|
def search_in_metadata(folder_path, search_word): |
|
"""Search for a specific word in the metadata of PNG files in the specified folder.""" |
|
matching_files = [] |
|
folder_path = f"./{folder_path}" |
|
sort_folder_path = f"./{folder_path}_sort" |
|
png_files = get_png_files(folder_path) |
|
|
|
for file in png_files: |
|
file_path = os.path.join(folder_path, file) |
|
metadata = read_metadata(file_path) |
|
search_word_lower = search_word.lower() |
|
|
|
for key, value in metadata.items(): |
|
if isinstance(value, str) and search_word_lower in value.lower(): |
|
matching_files.append(file) |
|
break |
|
if os.path.exists(sort_folder_path): |
|
shutil.rmtree(sort_folder_path) |
|
os.makedirs(sort_folder_path) |
|
move_files(folder_path, sort_folder_path, matching_files) |
|
return [os.path.splitext(file)[0] for file in matching_files] |
|
|
|
def move_files(src_folder, dst_folder, files): |
|
"""Move the specified files from the source folder to the destination folder.""" |
|
if not os.path.exists(dst_folder): |
|
os.makedirs(dst_folder) |
|
|
|
for file in files: |
|
src_path = os.path.join(src_folder, file) |
|
dst_path = os.path.join(dst_folder, file) |
|
shutil.move(src_path, dst_path) |
|
|
|
|