【问题标题】:Multi-Variable File Naming Convention多变量文件命名约定
【发布时间】:2018-05-15 18:14:21
【问题描述】:

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

提前感谢任何建议/重定向!

【问题讨论】:

  • @jpp 感谢您的提醒!标记你的;)

标签: python string python-3.x filenames


【解决方案1】:

您可以尝试使用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))

【讨论】:

    【解决方案2】:

    我建议在这里使用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)。

    【讨论】:

      【解决方案3】:

      我很笨,所以这就是我得到的......希望这会帮助其他尝试这样做的人: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
      

      【讨论】:

        猜你喜欢
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        相关资源
        最近更新 更多