首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多变量文件命名公约

多变量文件命名公约
EN

Stack Overflow用户
提问于 2018-05-15 18:14:21
回答 3查看 65关注 0票数 1

嘿哟!我试图将文件夹中所有图片的文件名更改为一个新的命名模式,以便我所使用的程序能够识别它。当前的命名模式是“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”。

我觉得这应该是非常容易的,但是我在格式化方面遇到了问题:/以下是我目前拥有的:

代码语言:javascript
运行
复制
files = os.listdir(".")
i = 1
for file in files:
   os.rename(file, file + 'r_'+i+'_'+i+'.png')
   i = i+1

预先感谢您的任何建议/重定向!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-15 18:32:20

您可以尝试使用str.format来简化输出文件名的定义。您还可以使用str.zfill提供必要的零填充。

此外,您还应该使用enumerate作为计数器。

最后,使用os.path.splitext将文件名和扩展名分隔开来是很有用的。

代码语言:javascript
运行
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2018-05-15 18:31:26

我建议在这里使用格式字符串。创建一个表示要使用的模式的字符串,然后用要替换为参数的值调用该字符串的format()方法。

在这种情况下,我想你可以

代码语言:javascript
运行
复制
"{0}r_{1:03d}_{1:04d}.{2}".format(base_filename, i, extension)

在格式代码{1:03d}中,1告诉它要使用哪个参数给format() (零索引,因此1表示第二个参数,i),冒号后面的部分告诉它如何格式化该参数:0表示包含前导零,3表示填充三个字符,d表示将其格式化为整数。

请注意,首先需要将文件名拆分为基(例如cam1_000)和扩展名(png)。

票数 0
EN

Stack Overflow用户

发布于 2018-05-15 18:34:45

我是哑巴,所以这就是我得到的..。希望这能帮助其他人做到这一点。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50356802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档