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
相关产品推荐
相关产品推荐

