Renombra múltiples archivos en Python

¿Cómo puedo cambiar el nombre de los siguientes archivos:

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

en los siguientes:

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

El código relacionado es:

 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])) 

    La única línea se puede romper para:

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

    Porque hoy he hecho algo parecido:

     #!/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)) 

    Aquí está mi solución que está escrita con comentarios para cada paso para que incluso un novato pueda entender, usar, piratear y personalizar:

    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 

    # Al cambiar una línea en el código, creo que esta línea funcionará o puede ser sin cambiar nada, esto funcionará

     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 

    Llame a la función pasando dos argumentos f_path como su ruta y new_name como quiera darle al archivo.