Rename multiple files in Python

后端 未结 6 1118
梦如初夏
梦如初夏 2020-12-01 08:14

How can I rename the following files:

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

into the following ones:

year_200         


        
相关标签:
6条回答
  • 2020-12-01 09:06

    # 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.

    0 讨论(0)
  • 2020-12-01 09:09
    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)
    
    0 讨论(0)
  • 2020-12-01 09:15

    This allows to rename the file with the creation date_time.

    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 讨论(0)
  • 2020-12-01 09:16

    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
    
    0 讨论(0)
  • 2020-12-01 09:18

    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))
    
    0 讨论(0)
  • 2020-12-01 09:20
    import os
    import glob
    
    path = 'C:\\Users\\yannk\\Desktop\\HI'
    file_num = 0
    for filename in glob.glob(os.path.join(path, '*.jpg')):
        os.rename(filename, path + '\\' + str(file_num) + '.jpg')
        file_num += 1
    

    This is to rename all files in a folder to the indentation of their position in the folder you should be able to scrap this code up and use it for your purpose. THIS is for people who are on windows and therefore os.cwd or os.getcwd do not work

    0 讨论(0)
提交回复
热议问题