You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于百分号命名占位符的字符串模板生成所有格式化排列文件名

生成所有参数组合的格式化文件名

这个需求其实很常见,核心就是要生成参数的笛卡尔积(所有可能的参数组合),再逐个套进你的百分号格式模板里就行。我给你整理了一个清晰的解决方案:

核心思路

  1. 提取参数字典里的键和对应的值列表
  2. 用itertools.product生成所有参数的组合(笛卡尔积)
  3. 将每个组合转换成匹配模板的字典格式
  4. 用模板的%操作符格式化每个组合,得到最终文件名

完整代码示例

import itertools

# 你的模板和参数
template = "image_%(uval)02d_%(vval)02d.%(frame)04d.tif"
params = { "uval": [1,2], "vval": [1,2], "frame": [10,11] }

# 提取参数的键和值列表
param_keys = list(params.keys())
param_value_lists = list(params.values())

# 生成所有文件名
filenames = []
for combo in itertools.product(*param_value_lists):
    # 把组合元组转成模板需要的字典
    current_params = dict(zip(param_keys, combo))
    # 格式化生成文件名
    filenames.append(template % current_params)

# 输出结果
print(filenames)

代码解释

  • itertools.product(*param_value_lists):这一步会生成所有参数的笛卡尔积,比如你的参数会生成(1,1,10)、(1,1,11)、(1,2,10)等共8种组合(2×2×2)
  • dict(zip(param_keys, combo)):把每个组合元组转换成和模板占位符匹配的字典,比如(1,1,10)会变成{"uval":1, "vval":1, "frame":10}
  • template % current_params:用Python原生的百分号格式化语法,把参数代入模板生成最终文件名

简化版本(列表推导式)

如果想让代码更简洁,可以用列表推导式一步完成:

import itertools

template = "image_%(uval)02d_%(vval)02d.%(frame)04d.tif"
params = { "uval": [1,2], "vval": [1,2], "frame": [10,11] }

param_keys = list(params.keys())
filenames = [template % dict(zip(param_keys, combo)) for combo in itertools.product(*params.values())]

print(filenames)

运行后会得到你需要的输出列表:

['image_01_01.0010.tif', 'image_01_01.0011.tif', 'image_01_02.0010.tif', 'image_01_02.0011.tif', 'image_02_01.0010.tif', 'image_02_01.0011.tif', 'image_02_02.0010.tif', 'image_02_02.0011.tif']

内容的提问来源于stack exchange,提问作者Julian Mann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:42:25