多变量文件命名约定

Multi-Variable File Naming Convention

嘿嘿!我正在尝试将文件夹中所有图片的文件名更改为新的命名模式,以便我使用的程序可以识别它。当前的命名模式是 'cam1_###.png',其中 ### 是序列中的数字。例如,第一张照片被命名为 "cam1_000.png".

我想要得到的是以下命名模式:'cam1_r###_####_rgb.png' 其中 'r###' 和 '####' 每次都增加 1。例如,文件夹中的第一张图片“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

提前感谢任何advice/redirection!

我建议在这里使用 format string。您创建一个表示您要使用的模式的字符串,然后调用该字符串的 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)。

您可以尝试使用 str.format to make your output filename easier to define. You can also use 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))

我很笨,所以这就是我得到的...希望这能帮助其他尝试这样做的人:D

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