python 文件名更改

python file name change

我正在尝试更改文件名,如下所示: 000000 是相同的数字。

000000_ABC.png      --->000000+1_ABC.png
000000_DEF.png      --->000000+2_DEF.png
000000_GHI.png      --->000000+3_GHI.png
000000_JKL.png      --->000000+4_JKL.png

为此,我编写了如下代码。

img_files = os.listdir(PATH_TO_PNG_FILES)
for img_file, i in zip(img_files, range(len(img_files))):
    new_img_file = img_file.replace("_", "+"+str(i)+"_")
    os.rename(path + img_file, path + new_img_file)

不止四个文件,还有更多类似的行。 问题是在 运行ning pycharm 之后,它成功地产生了想要的结果,但是在我 运行 另一个与结果目录相关的页面之后,结果继续像下面这样改变过程完成后。我不明白为什么。

000000+1+1_ABC.png
000000+2+2_DEF.png
000000+3+3_GHI.png
000000+4+4_JKL.png

or 

otherwise "+unexpected number" 

一个简单而幼稚的方法是添加一个验证来检查文件名中是否有'+'。如果您有其他可能包含 + 的文件,您可能需要检查更严格的模式。

这是因为其他目录可能已经包含格式为“000000+1_ABC.png”的文件,而您的脚本正在将 _ 更改为“+1_”,导致“000000+1+[=13=” ]”。要解决这个问题,您可以添加一个 if 语句来检查它不应包含“+”符号。

img_files = os.listdir(path inside of which the png files are saved)
for img_file, i in zip(img_files, range(len(img_files))):
    if not ("+" in img_file):
        new_img_file = img_file.replace("_", "+"+str(i)+"_")
        os.rename(path + img_file, path + new_img_file)

我制作了一个 YouTube 视频https://youtu.be/K9jhAPZLZLc,内容是关于如何重命名多个文件,就像您假设所有文件都在同一目录中一样。

回答你的问题。假设所有图像文件都在同一个文件夹中。

path = 'C:\Users\USER\Desktop\rename_images\images\' # path to your images
files = os.listdir(path)

for count, filename in enumerate(files):
    # Get the file extension
    file, file_extension = os.path.splitext(filename)

    # check if the current file is a folder or not
    full_path = f'{path}{filename}'

    if os.path.isdir(full_path):
        print('This is a directory')
    elif os.path.isfile(full_path):
        print('This is a normal file')
        # Rename
        if  not '+' in file:
            try:
                file_split = file.split('_')
                zeros = file_split[0]
                alpha = file_split[-1]
                current_file_name = os.path.join(path, filename)
                new_file_name = os.path.join(path, ''.join([f'{zeros}+{count}_{alpha}', file_extension]))

                os.rename(current_file_name, new_file_name)
            except:
                pass
        else:
            pass
    else:
        print('This is a special file')

    
    

我想问题出在修改名称而不是覆盖。

import os
DIR_PATH = 'files'

def rename_files(dir_name):
    img_files = os.listdir(dir_name)
    for i in range(len(img_files)):
        file_name = img_files[i].split('_')[-1]
        file_name = '000000+{0}_{1}'.format(i, file_name)
        os.rename(
            os.path.join(dir_name, img_files[i]),
            os.path.join(dir_name, file_name)
        )

if __name__ == '__main__':
    rename_files(DIR_PATH)