Renaming multiple files in Python

How can I rename the following files:

abc_2000.jpg abc_2001.jpg abc_2004.jpg abc_2007.jpg 

in the following:

 year_2000.jpg year_2001.jpg year_2004.jpg year_2007.jpg 

Associated Code:

 import os import glob files = glob.glob('abc*.jpg') for file in files: os.rename(file, '{}.txt'.format(???)) 
+12
python file-rename
source share
5 answers
 import os import glob files = glob.glob('year*.jpg') for file in files: os.rename(file, 'year_{}'.format(file.split('_')[1])) 

One line can be broken into:

 for file in files: parts = file.split('_') #[abc, 2000.jpg] new_name = 'year_{}'.format(parts[1]) #year_2000.jpg os.rename(file, new_name) 
+16
source share

Because today I did something similar:

 #!/usr/bin/env python import os import sys import re if __name__ == "__main__": _, indir = sys.argv infiles = [f for f in os.listdir(indir) if os.path.isfile(os.path.join(indir, f))] for infile in infiles: outfile = re.sub(r'abc', r'year' , infile) os.rename(os.path.join(indir, infile), os.path.join(indir, outfile)) 
+4
source share

Here is my solution, which is written with comments for each step, so that even a novice can understand and use, hack and configure:

https://github.com/JerusalemProgramming/PythonAutomatedRenamingOfFilenames/blob/master/program_FileRenameJPEGS.py

 ## THIS PYTHON FILE NEEDS TO BE RUN WITHIN THE IMAGES FOLDER WITH JPG/JPEG IMAGES WHOSE ## ..FILENAMES NEED RENAMED TO NUMERICAL SEQUENCE (1.jpg, 2.jpg, 3.jpg, 4.jpg... etc.) ## IMPORT MODULES ## IMPORT MODULES ## IMPORT MODULES import re, glob, os, pathlib ## BEGIN DEFINE FUNCTIONS ## BEGIN DEFINE FUNCTIONS ## BEGIN DEFINE FUNCTIONS def fn_RenameFiles(files, pattern, replacement): ## DECLARE VARIABLES ## SET COUNTER FOR LATER USE i = 1 ## BEGIN FOR LOOP ## BEGIN FOR LOOP ## BEGIN FOR LOOP ## FOR EACH PATHNAME IN for pathname in glob.glob(files): ## PATHNAME #print("pathname =", pathname) ## TEST OUTPUT ## BASENAME basename = os.path.basename(pathname) #print("basename =", basename) ## TEST OUTPUT ## IF PATHNAME EQUALS BASENAME... if pathname == basename: ##...THEN TEST OUTPUT - THIS SHOULD ALWAYS PRINT TRUE print("pathname == basename: TRUE") print("pathname string =", pathname) ## STRING FILENAME IN DIRECTORY print("basename string =", basename) ## STRING FILENAME IN DIRECTORY ## ELSE IF PATHNAME DOES NOT EQUAL BASENAME... else: ##...THEN TEST OUTPUT print("pathname == basename: FALSE") print("pathname string =", pathname) ## STRING FILENAME IN DIRECTORY print("basename string =", basename) ## STRING FILENAME IN DIRECTORY ## CALCULATE NEW FILENAME WITH REGULAR EXPRESSIONS NewFilename = re.sub(pattern, replacement, basename) ## TEST OUTPUT print("NewFilename =", NewFilename) ## IF NEWFILENAME DOES NOT EQUAL BASENAME... if NewFilename != basename: ##...THEN RENAME THE PATHNAME WITH NEWFILENAME os.rename(pathname, os.path.join(os.path.dirname(pathname), NewFilename)) ## ELSE DOES THIS CONDTION EVER GET TRIGGERED? else: print("DOES THIS CONDITION EVER GET TRIGGERED?") ## END FOR LOOP ## END FOR LOOP ## END FOR LOOP ## TEST OUTPUT - LIST OF FILENAMES IN DIRECTORY print("glob.glob(files) =", glob.glob(files)) ## BEGIN FOR LOOP ## BEGIN FOR LOOP ## BEGIN FOR LOOP ## FOR EACH FILE IN glob.glob(files) for each in glob.glob(files): ## FILE PATH TO DIRECTORY OF IMAGES ## FILE PATH OF CURRENT WORKING DIRECTORY WITH IMAGES = eg C:\RootFolder\images filepath = os.path.abspath('') ## = os.getcwd() ## TEST OUTPUT - FILE PATH OF CURRENT WORKING DIRECTORY print("FILE PATH OF CURRENT WORKING DIRECTORY =", filepath) ## RENAME FILES IN CWD; JOIN EMPTY STRING FILEPATH + STRING OF INTEGER OF CURRENT COUNTER + STRING OF .JPG os.rename(os.path.join(filepath, each), os.path.join(filepath, str(i)+'.jpg')) ## INCREASE COUNTER i = i+1 ## END FOR LOOP ## END FOR LOOP ## END FOR LOOP ## TEST OUTPUT - LIST OF FILENAMES IN DIRECTORY print("glob.glob(files) =", glob.glob(files)) ## TEST OUTPUT - GAME OVER print("GAME OVER. GO CHECK YOUR IMAGE FOLDER") ## END DEFINE FUNCTIONS ## END DEFINE FUNCTIONS ## END DEFINE FUNCTIONS ### BEGIN MAIN PROGRAM ### BEGIN MAIN PROGRAM ### BEGIN MAIN PROGRAM ## CALL FUNCTION fn_RenameFiles("*.jpg", r"^(.*)\.jpg$", r"new(\1).jpg") ### END MAIN PROGRAM ### END MAIN PROGRAM ### END MAIN PROGRAM ## GAME OVER ## WE HOPE YOU ENJOYED AND THAT THIS HELPS YOUR UNDERSTANDING OF USING PYTHON LANGUAGE TO SOLVE PROBLEMS WITH PYTHON PROGRAMMING ## PLEASE COME BACK AGAIN SOON ## PLEASE VISIT OUR WEB SITES (OUR PROBLEM-SOLVING PROGRAMMING, CODING, & DEVELOPMENT SERVICES ARE AVAILABLE FOR HIRE): ## www.JerusalemProgrammer.com ## www.JerusalemProgrammers.com ## www.JerusalemProgramming.com 
0
source share

# By changing one line in the code, I think that this line will work or, possibly, without changing anything that will work

 import glob2 import os def rename(f_path, new_name): filelist = glob2.glob(f_path + "*.ma") count = 0 for file in filelist: print("File Count : ", count) filename = os.path.split(file) print(filename) new_filename = f_path + new_name + str(count + 1) + ".ma" os.rename(f_path+filename[1], new_filename) print(new_filename) count = count + 1 

Call the function by passing two f_path arguments as your path and new_name, which you want to pass to the file.

0
source share

This allows you to rename the file with the creation date.

 import os, datetime, time folder = r"*:\***\***\TEST" for file in os.listdir(folder): date = os.path.getmtime(os.path.join(folder, file)) new_filename = datetime.datetime.fromtimestamp(date).strftime("%Y%m%d_%H%M%S.%f")[:-4] os.rename(os.path.join(folder, file), os.path.join(folder, new_filename + ".pdf")) print("Renamed " + file + " to " + new_filename) time.sleep(0.1) 
0
source share

All Articles