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

Python实现文件双占位符替换并避免生成重复文件

解决占位符替换与重复文件避免的Python实现

你的代码存在两个核心问题,导致无法正确替换两个占位符,且会覆盖重复名字的文件,以下是修正方案:

原代码问题分析

  • 占位符替换失效:第二次调用replace时直接使用原始的card_contents,导致第一次替换的[name]被覆盖,最终只有[sender_name]生效。
  • 重复文件被覆盖:如果names文件中有重复名字,后续生成的文件会直接覆盖之前的同名文件,无法保留多个结果。

修正后的代码

PLACEHOLDER_NAME = "[name]"
PLACEHOLDER_SENDER = "[sender_name]"
SENDER = input("请输入你的名字:")

# 读取名字列表,过滤空行
with open("names", encoding="utf-8") as names_file:
    names = [name.strip() for name in names_file.readlines() if name.strip()]

# 读取生日贺卡模板内容
with open("birthday_card", encoding="utf-8") as birthday_card:
    card_template = birthday_card.read()

for name in names:
    # 链式替换两个占位符,确保都生效
    new_card_content = card_template.replace(PLACEHOLDER_NAME, name).replace(PLACEHOLDER_SENDER, SENDER)
    
    # 处理重复文件名,避免覆盖
    base_filename = f"{name}.txt"
    filename = base_filename
    counter = 1
    
    # 使用x模式尝试创建文件,存在则添加数字后缀
    while True:
        try:
            with open(filename, mode="x", encoding="utf-8") as completed_card:
                completed_card.write(new_card_content)
            break
        except FileExistsError:
            filename = f"{name}_{counter}.txt"
            counter += 1

关键修正说明

  • 正确替换占位符:通过链式调用replace,先替换[name],再基于替换后的内容替换[sender_name],保证两个占位符都能被正确替换。
  • 避免重复文件:利用Python的x文件打开模式(创建新文件,若已存在则报错),捕获FileExistsError后自动在文件名后添加递增数字后缀,直到找到可用的文件名。
  • 额外优化:读取名字时过滤空行,避免处理无效的空名字,提升代码健壮性。

内容的提问来源于stack exchange,提问作者Raz Ramirez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:45:42