13

如何重命名以下文件:

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

分为以下几个:

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

相关代码为:

import os
import glob
files = glob.glob('abc*.jpg')
for file in files:
    os.rename(file, '{}.txt'.format(???))
4

7 回答 7

17
import os
import glob
files = glob.glob('year*.jpg')
for file in files:
    os.rename(file, 'year_{}'.format(file.split('_')[1]))

一行可以分解为:

for file in files:
    parts = file.split('_') #[abc, 2000.jpg]
    new_name = 'year_{}'.format(parts[1]) #year_2000.jpg
    os.rename(file, new_name)
于 2013-07-19T14:14:36.770 回答
4

因为我今天做了类似的事情:

#!/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))
于 2017-12-20T13:50:40.773 回答
0

这是我的解决方案,每个步骤都有注释,这样即使是新手也能理解和使用、破解和自定义:

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
于 2019-01-03T07:04:21.223 回答
0

# 通过更改代码中的一行,我认为这行将起作用,或者可能不做任何更改,这将起作用

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

通过传递两个参数 f_path 作为你的路径和 new_name 作为你想要给文件的参数来调用函数。

于 2019-01-09T04:39:28.023 回答
0

这允许使用创建日期时间重命名文件。

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)
于 2019-08-26T12:27:13.723 回答
0
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

这是为了将文件夹中的所有文件重命名为它们在文件夹中位置的缩进,您应该能够废弃此代码并将其用于您的目的。这适用于在 Windows 上的人,因此 os.cwd 或 os.getcwd 不起作用

于 2020-04-05T09:25:21.447 回答
0

检查是否存在带有 new_name 的文件。如果不存在文件,则继续重命名文件。

for file in files:
    parts = file.split('_') # Existing file name
    new_name = 'year_{}'.format(parts[1]) #New file to be written
    if not os.path.exists(new_name):
        os.rename(file, new_name)
于 2021-02-13T14:46:19.630 回答