使用docxtpl生成输出文件时如何为每个文件设置带计数器的唯一名称
实现步骤
- 移动计数器初始化代码到批量生成文件的循环逻辑外层,避免每次生成文件时计数器被重置,无法实现递增效果。
- 修改文件名模板
output_str,新增计数对应的占位符,示例如下:
# 原有文件名模板示例,可根据你的实际命名规则调整 output_str = "{short_name}_最终文档.docx" # 新增{count}占位符用于插入计数值 output_str = "{short_name}_最终文档_{count}.docx"
- 调整
doc.save调用逻辑,调用counter()获取当前计数值传入格式化参数即可,修改后代码如下:
# 计数器初始化要放在循环外,只需执行一次 counter = create_counter() # 以下是循环内的生成逻辑 doc.render(context) doc.save(output_path / output_str.format( short_name=student['short_name'], count=counter() ))
计数器逻辑优化说明
你当前的计数器初始值设为1,每次调用先加2再返回值,第一次调用会返回3。如果需要自定义起始值和步长,可调整计数器实现:
def create_counter(start=1, step=1): i = start - step def func(): nonlocal i i += step return i return func # 示例:从1开始,步长为2的计数,和你原有逻辑效果一致 counter = create_counter(start=1, step=2)
内容的提问来源于stack exchange,提问作者dim0ntei
相关产品推荐
相关产品推荐

