用于重命名文件的Python嵌套循环



我想使用os.rename((重命名文件,如下所示:

x_y.jpg 

CCD_ 1应当来自列表CCD_。

CCD_ 3应当从1计数到10。到达10后,x应跳到列表上的第二个数字(此处:'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'])))

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

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

for z, file in enumerate(directory):

每次到达一个新文件时,您的"x"one_answers"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

您正在覆盖x0。此外,你的循环没有完成它们需要做的事情。通过循环第一个循环中的文件,你的内部循环每次运行都会有相同的文件名,因此在第一次运行后,文件将被重命名,第二次运行无法再访问它。

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

此外,使用嵌套循环是一个不错的想法,但您需要进行

i = 0
for y in my_list:
for x in range(10):
os.rename(os.path.join(source_folder, directory[i]), os.path.join(destination_folder, '{}_{}.jpg'.format(y, x)))
i += 1

x达到10时,跳y。我会定义一个i变量来跟踪下一个文件,并在每次重命名后执行i += 1,这样,当directory列表结束时,您可能需要一个退出条件。

最新更新