Batch rename sequential files by padding with zeroes

后端 未结 8 1179
天命终不由人
天命终不由人 2020-12-08 02:42

I have a bunch of files named like so:

output_1.png
output_2.png
...
output_10.png
...
output_120.png

What is the easiest way of renaming t

8条回答
  •  攒了一身酷
    2020-12-08 02:58

    Here is a Python script I wrote that pads zeroes depending on the largest number present and ignores non-numbered files in the given directory. Usage:

    python ensure_zero_padding_in_numbering_of_files.py /path/to/directory
    

    Body of script:

    import argparse
    import os
    import re
    import sys
    
    def main(cmdline):
    
        parser = argparse.ArgumentParser(
            description='Ensure zero padding in numbering of files.')
        parser.add_argument('path', type=str,
            help='path to the directory containing the files')
        args = parser.parse_args()
        path = args.path
    
        numbered = re.compile(r'(.*?)(\d+)\.(.*)')
    
        numbered_fnames = [fname for fname in os.listdir(path)
                           if numbered.search(fname)]
    
        max_digits = max(len(numbered.search(fname).group(2))
                         for fname in numbered_fnames)
    
        for fname in numbered_fnames:
            _, prefix, num, ext, _  = numbered.split(fname, maxsplit=1)
            num = num.zfill(max_digits)
            new_fname = "{}{}.{}".format(prefix, num, ext)
            if fname != new_fname:
                os.rename(os.path.join(path, fname), os.path.join(path, new_fname))
                print "Renamed {} to {}".format(fname, new_fname)
            else:
                print "{} seems fine".format(fname)
    
    if __name__ == "__main__":
        sys.exit(main(sys.argv[1:]))
    

提交回复
热议问题