我需要用Python重命名文件夹中的992图像名称。图像的名称应根据其顺序而改变。例如
current name
image_1 should rename to P1_ES_1
image_2 should rename to P1_ES_2
image_3 should rename to P1_ES_3
image_4 should rename to P1_ED_1
image_5 should rename to P1_ED_2
image_6 should rename to P1_ED_3
并且对于接下来的六个图像将再次重复相同的事情,只是“P”将改变如下:
image_7 should rename to P2_ES_1
image_8 should rename to P2_ES_2
image_9 should rename to P2_ES_3
image_10 should rename to P2_ED_1
image_11 should rename to P2_ED_2
image_12 should rename to P2_ED_3
我已经将代码片段更改为附加文件显示的前六个图像,这不像我需要的那样.
这里是片段:
import os
import glob
path = 'F:/my_data/imagesResized/'
def rename_files():
j = 1
i = 1
for i, filename in enumerate(glob.glob(path + '*.png')):
os.rename(filename[:], os.path.join(path, 'P' + str(i) + '_'+ "ES" + '_' + str(j) + '.png'))
j += 1
if __name__ == '__main__':
rename_files()
最简单的方法是使用modulo
运算符循环遍历索引。你用enumerate
做了正确的工作。另一个有趣的事实,使用sorted
相应地使用glob
对图像进行排序,有时,文件名以随机顺序排列:
fns = sorted(glob.glob(path + '*.png')):
es_or_ed = 'ED'
for i, fn in enumerate(fns):
# Check for ED or ES
if i % 3 == 0 and es_or_ed == 'ES':
es_or_ed = 'ED'
elif i % 3 == 0 and es_or_ed == 'ED':
es_or_ed = 'ES'
# Create new filename
new_fn = 'P{}_{}_{}.png'.format(i // 6 + 1, es_or_ed, i%3+1)
# rename...
os.rename(fn, os.path.join(path, new_fn))
对于随机图像,这会给你
old: image_1 new: P1_ES_1
old: image_2 new: P1_ES_2
old: image_3 new: P1_ES_3
old: image_4 new: P1_ED_1
old: image_5 new: P1_ED_2
old: image_6 new: P1_ED_3
old: image_7 new: P2_ES_1
old: image_8 new: P2_ES_2
old: image_9 new: P2_ES_3
old: image_10 new: P2_ED_1
...
我会做点什么的
def build_file_name(files):
p_order = 1
current_e = "ES"
current_e_order = 1
for file_name in files:
file_sections = file_name.split('.')
file_name = file_sections[0] #this holds file name without extension
extension = file_sections[1] # this holds extension
new_file_name = []
file_order = int(file_name.split('_')[1].strip()) # Incause you're sure that it's always image_{some_number}
current_e_order = current_e_order + 1
new_file_name.append("P" + str(p_order))
new_file_name.append("_")
new_file_name.append(current_e)
new_file_name.append("_")
new_file_name.append(str(current_e_order))
new_file_name.append(extension) #append extension back
if file_order % 6 == 0:
p_order = p_order + 1
if file_order % 3 == 0:
current_e = "ED" if current_e == "ES" else "ES"
current_e_order = 1
final_file_name = ''.join(new_file_name) # build normal path now.