首页 > 解决方案 > 用于重命名文件的 Python 嵌套循环

问题描述

我想像这样使用 os.rename() 重命名文件:

x_y.jpg 

x应该来自一个列表['2', '3', '4', '5', '8', '9', '10']

y1应该从到计数10。到达 后10x应跳转到列表中的第二个数字(此处为: '3')并y重新开始计数。像这样:

2_1.jpg
2_2.jpg
2_3.jpg
...
3_1.jpg
3_2.jpg

我认为最好的办法是构建一个嵌套循环,但我不确定如何,因为我是 python 的初学者。我想过这样的事情,但这不能正常工作。只有第一个文件被重命名。然后出现一个错误,说明该文件已经存在。

my_list = ['2', '3', '4', '5', '8', '9', '10']
included_extensions = ['jpg', 'JPG']
directory = [fn for fn in os.listdir(source_folder)
              if any(fn.endswith(ext) for ext in included_extensions)]

for y, file in enumerate(directory):
    for x in range(10):
        for x in my_list:
            os.rename(os.path.join(source_folder,file), os.path.join(destination_folder, ''.join([str(x),'_',str(y+1),'.jpg'])))

标签: pythonfor-looprenamenested-loopsfile-rename

解决方案


您应该只需要一个 for 循环。您只想重命名每个文件一次,因此您应该只需要遍历文件名一次。

要遍历所需的不同名称类型,您可以改用枚举中的索引。例如 - 使用

for z, file in enumerate(directory):

每次到达新文件时,您的 'x' 和 'y' 值都可以被评估为

this_x = my_list[z // 10]
this_y = z % 10

最终得到类似的东西


for z, file in enumerate(directory):
    newName = str(my_list[z // 10]) + '_' + str(z % 10) + '.jpg'
    os.rename(os.path.join(source_folder,file), os.path.join(destination_folder, newName))
    fileCount += 1


推荐阅读