#!/usr/bin/env python3 """ This script walks through a directory, identifies image files, and checks for the existence of corresponding .caption and .tags files. It then concatenates the contents of .caption and .tags files into the .txt files. Usage: - Place the script in the directory containing the image files. - Run the script to concatenate .caption and .tags files into .txt files. - Use the dry_run flag to preview the changes without writing to the .txt files. - Files missing either .caption or .tags will be skipped. Functions: get_files(path): Walks through the directory and yields image files along with their .caption and .tags files. concat(caption_path, tags_path, txt_path, dry_run=False): Concatenates the contents of .caption and .tags files into the .txt file. """ from pathlib import Path import os FILE_EXTS = {".png", ".jpg", ".jpeg", ".tiff", ".bmp", ".gif", ".jxl", ".webp"} def get_files(path): path = Path(path) # Walk the directory, looking for image files for root, dirs, files in os.walk(path): root = path / root for file in files: file = root / file if file.suffix not in FILE_EXTS: continue caption = file.with_suffix(".caption") tags = file.with_suffix(".tags") txt = file.with_suffix(".txt") if not caption.exists(): print(f"Skipping {file}: {caption} does not exist") continue if not tags.exists(): print(f"Skipping {file}: {tags} does not exist") continue yield file, caption, tags, txt def concat(caption_path, tags_path, txt_path, dry_run=False): with open(caption_path, "r") as f: caption = f.read().strip() with open(tags_path, "r") as f: tags = f.read().strip(", \n") txt = f"{tags}, {caption}" if dry_run: print(f"{txt_path}:") print(txt) print() else: with open(txt_path, 'w') as f: f.write(txt) print(f"wrote {txt_path}") if __name__ == "__main__": dry_run = False for f in get_files("."): concat(*f[1:], dry_run=dry_run)