Harley
Harley

Reputation: 1

Batch rename files in Python 2.7

I'm trying to rename files in a directory so that it the new name is the original name followed by a space + "17-" + an incrementally increasing number.

The code below is just renaming files from 151, upward. How do I keep the original name, adding the text "17-" and the numbers?

import os
path = 'C:\Users\dcs\Desktop\Test direct'
files = os.listdir(path)
i = 151

for file in files:
    os.rename(os.path.join(path, file), os.path.join(path, str(i)+'.TIF'))
    i = i+1

Upvotes: 0

Views: 577

Answers (2)

Harley
Harley

Reputation: 1

If I understand Prune's suggestion above, which I obviously don't, it would look like:

import os
path = 'C:\Users\dcs\Desktop\Test direct'
files = os.listdir(path)
i = 151

#The part that I want to strip the extensions from
for file in files:
    new_name = file[:-3]

#The part that words correctly (thanks Prune)
for fname in files:
    new_name = fname + " 17-" + str(i) + ".TIF"
    os.rename(os.path.join(path, fname), new_name)
    i += 1

However the first part, meant to strip the file of it's extension isn't working.

Upvotes: 0

Prune
Prune

Reputation: 77837

Simply by writing that concatenation expression. If I understand your details correctly, your new loop body would be

new_name = file + " 17-" + str(i) + ".TIF"
os.rename(os.path.join(path, file), 
          os.path.join(path, new_name) )
i += 1

This would change file "ABC" into file "ABC 17-151.TIF"; the next would contain "17-152", and so on.

FACEPALM

file is a built-in type. Change the loop index.

for fname in files:
    new_name = fname + " 17-" + str(i) + ".TIF"
    os.rename(os.path.join(path, fname), new_name)
    i += 1

Upvotes: 2

Related Questions