How can I rename the following files:
abc_2000.jpg
abc_2001.jpg
abc_2004.jpg
abc_2007.jpg
into the following ones:
year_2000.jpg
year_2001.jpg
year_2004.jpg
year_2007.jpg
The related code is:
import os
import glob
files = glob.glob('abc*.jpg')
for file in files:
os.rename(file, '{}.txt'.format(???))
import os
import glob
files = glob.glob('year*.jpg')
for file in files:
os.rename(file, 'year_{}'.format(file.split('_')[1]))
The one line can be broken to:
for file in files:
parts = file.split('_') #[abc, 2000.jpg]
new_name = 'year_{}'.format(parts[1]) #year_2000.jpg
os.rename(file, new_name)
Because I have done something similar today:
#!/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))
Here is my solution which is written with comments for each step so that even a newbie can understand and use, hack, and customize:
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 = e.g. 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
# By changing one line in code i think this line will work or may be without changing anything this 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 arguments f_path as your path and new_name as you like to give to file.