嘿哟!我试图将文件夹中所有图片的文件名更改为一个新的命名模式,以便我所使用的程序能够识别它。当前的命名模式是“cam1_###.png”,其中###是序列中的数字。例如,第一张照片名为"cam1_000.png“。
我想了解的是以下命名模式:“cam1_r###_####_rgb.png”,其中“r###”和“####”每次增加一次。例如,文件夹中的第一个图像“cam1_000.png”将被重命名为“cam1_r000_0000_rgb.png”,而第100张照片将从“cam1_099.png”重命名为“cam1_r099_0099_rgb.png”。
我觉得这应该是非常容易的,但是我在格式化方面遇到了问题:/以下是我目前拥有的:
files = os.listdir(".")
i = 1
for file in files:
os.rename(file, file + 'r_'+i+'_'+i+'.png')
i = i+1
预先感谢您的任何建议/重定向!
发布于 2018-05-15 18:32:20
您可以尝试使用str.format
来简化输出文件名的定义。您还可以使用str.zfill
提供必要的零填充。
此外,您还应该使用enumerate
作为计数器。
最后,使用os.path.splitext
将文件名和扩展名分隔开来是很有用的。
for i, file in enumerate(sorted(files), 1):
name, ext = os.path.splitext(file)
os.rename(file, '{0}_r{1}_{2}.{3}'.format(name.split('_')[0], str(i).zfill(3),
str(i).zfill(4), ext))
发布于 2018-05-15 18:31:26
我建议在这里使用格式字符串。创建一个表示要使用的模式的字符串,然后用要替换为参数的值调用该字符串的format()
方法。
在这种情况下,我想你可以
"{0}r_{1:03d}_{1:04d}.{2}".format(base_filename, i, extension)
在格式代码{1:03d}
中,1
告诉它要使用哪个参数给format()
(零索引,因此1
表示第二个参数,i
),冒号后面的部分告诉它如何格式化该参数:0
表示包含前导零,3
表示填充三个字符,d
表示将其格式化为整数。
请注意,首先需要将文件名拆分为基(例如cam1_000
)和扩展名(png
)。
发布于 2018-05-15 18:34:45
我是哑巴,所以这就是我得到的..。希望这能帮助其他人做到这一点。
files = os.listdir(".")
i = 0
for file in files:
alpha="%03d" % i
beta="%04d" % i
os.rename(file, 'cam1_r'+alpha+'_'+beta+'_rgb'+'.png')
i = i+1
https://stackoverflow.com/questions/50356802
复制相似问题