|
import sys |
|
import os |
|
import glob |
|
import argparse |
|
|
|
def get_parser(**parser_kwargs): |
|
parser = argparse.ArgumentParser(**parser_kwargs) |
|
parser.add_argument( |
|
"--img_dir", |
|
type=str, |
|
nargs="?", |
|
const=True, |
|
default="input", |
|
help="directory with images to be renamed", |
|
), |
|
parser.add_argument( |
|
"--find", |
|
type=str, |
|
nargs="?", |
|
const=True, |
|
default=None, |
|
help="what strings to replace, in csv format, default: 'a man,a woman,a person'", |
|
), |
|
parser.add_argument( |
|
"--replace", |
|
type=str, |
|
nargs="?", |
|
required=False, |
|
const=True, |
|
default=None, |
|
help="string to replace with, ex. 'john doe'", |
|
), |
|
parser.add_argument( |
|
"--append_only", |
|
type=str, |
|
nargs="?", |
|
required=False, |
|
const=True, |
|
default=None, |
|
help="skips pronoun replace, adds a string at the end of the filename, use for 'by artist name' or 'in the style of somestyle'", |
|
) |
|
|
|
return parser |
|
|
|
def isWindows(): |
|
return sys.platform.startswith('win') |
|
|
|
def get_replace_list(opt): |
|
if opt.find is None: |
|
return ("a man", "a woman", "a person", \ |
|
"a girl", "a boy", \ |
|
"a young woman", "a young man", \ |
|
"a beautiful woman", "a handsome man", \ |
|
"a beautiful young woman", "a handsome young man", |
|
) |
|
else: |
|
return opt.find.split(",") |
|
|
|
def get_outfile_name(infile, append): |
|
new_filename = f"{os.path.splitext(infile)[0]} {append}{os.path.splitext(infile)[1]}" |
|
return new_filename |
|
|
|
def rename_files(opt): |
|
find_list = get_replace_list(opt) |
|
|
|
for idx, file in enumerate(glob.iglob(f"{opt.img_dir}/*")): |
|
print(file) |
|
|
|
if os.path.splitext(file)[1] in (".jpg", ".png", ".jpeg", ".gif", ".bmp", ".webp"): |
|
new_filename = file |
|
if opt.append_only is not None: |
|
new_filename = get_outfile_name(file, opt.append_only) |
|
else: |
|
for s in find_list: |
|
if s in file: |
|
new_filename = new_filename.replace(s, opt.replace) |
|
try: |
|
print(f"Renaming {file} to {new_filename}") |
|
if os.path.exists(new_filename): |
|
new_filename = new_filename = get_outfile_name(file, f"_{idx}") |
|
print(f"filename already exists, appended '_n' to {new_filename}") |
|
|
|
try: |
|
os.rename(file, new_filename) |
|
except Exception as e: |
|
print(f"Error renaming file: {file}, skipping, error: {e}") |
|
except Exception as e: |
|
print(f"error opening file: {file}") |
|
print(f"{e}") |
|
raise e |
|
|
|
|
|
if __name__ == "__main__": |
|
parser = get_parser() |
|
opt = parser.parse_args() |
|
|
|
import time |
|
|
|
s = time.perf_counter() |
|
|
|
rename_files(opt) |
|
|
|
elapsed = time.perf_counter() - s |
|
print(f"{__file__} executed in {elapsed:0.2f} seconds.") |