Search code examples
pythonfile-rename

How to add a fixed number to the integer part of a filename?


Using Python, I need to add 100 to the integer part of some filenames to rename the files. The files look like this: 0000000_6dee7e249cf3.log where 6dee7e249cf3 is a random number. At the end I should have:

0000000_6dee7e249cf3.log should change to 0000100_6dee7e249cf3.log
0000001_12b2bb88d493.log should change to 0000101_12b2bb88d493.log
etc, etc…

I can print the initial files using:

initial: glob('{0:07d}_*[a-z]*'.format(NUM))

but the final files returns an empty list:

final: glob('{0:07d}_*[a-z]*'.format(NUM+100))

Moreover, I cannot not rename initial to final using os.rename because it can not read the list created using the globe function.


Solution

  • I've included your regex search. It looks like glob doesn't handle regex, but re does

    import os
    import re
    #for all files in current directory
    for f in os.listdir('./'):
        #if the first 7 chars are numbers
        if re.search('[0-9]{7}',f):
            lead_int = int(f.split('_')[0])
            #if the leading integer is less than 100
            if lead_int < 100:
                # rename this file with leading integer + 100
                os.rename(f,'%07d_%s'%(lead_int + 100,f.split('_')[-1]))