多变量文件命名约定
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
嘿嘿!我正在尝试将文件夹中所有图片的文件名更改为新的命名模式,以便我使用的程序可以识别它。当前的命名模式是 '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