Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import re
- import argparse
- def main(path, extensions, padding, number, dry_run):
- extensions = r"\.(?:" + "|".join(extensions) + ")" if extensions else ""
- st = r"(?:\D*\d+)+\D*(?:" + extensions + r")"
- reg = re.compile(st)
- if number > 1:
- st = r"((?:\D*(\d+)){" + str(number - 1) + r"})"
- else:
- st = r""
- st += r"(?:(\D*)(\d+)){1}(.*)"
- reg_sub = re.compile(st)
- for fn in os.listdir(path):
- if reg.match(fn):
- t = reg_sub.match(fn)
- if t:
- if number > 1:
- tmp = t.group(3).zfill(padding)
- new_name = reg_sub.sub(r"\1\2" + tmp + r"\4", fn)
- else:
- tmp = t.group(2).zfill(padding)
- new_name = reg_sub.sub(tmp + r"\3", fn)
- print(fn, end=" -> ")
- print(new_name)
- print("***")
- if not dry_run:
- os.rename(os.path.join(path, fn), os.path.join(path, new_name))
- if __name__ == "__main__":
- ap = argparse.ArgumentParser(description="Zero padding to number in file name")
- ap.add_argument("-e", "--extensions", action="append", help="List file extentions")
- ap.add_argument("-n", "--number", type=int, default=1, help="Number's group number")
- ap.add_argument("-p", "--padding", type=int, default=2, help="Number of zero for padding")
- ap.add_argument("--dry-run", dest="dry_run", action="store_true", help="Only print changed name")
- ap.set_defaults(dry_run=False)
- ap.add_argument("path", nargs="?", default=os.getcwd)
- args = ap.parse_args()
- main(args.path, args.extensions, args.padding, args.number, args.dry_run)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement