
本文介绍如何使用python读取单行文本,提取其中的数字并生成多行副本,使每行中的数字按指定范围递增,适用于日志模板生成、测试数据构造等场景。
本文介绍如何使用python读取单行文本,提取其中的数字并生成多行副本,使每行中的数字按指定范围递增,适用于日志模板生成、测试数据构造等场景。
在实际开发中,我们常需基于一个带编号的模板行(如 "ABCD1EFGH")批量生成序列化内容,要求每次复制时将中间的数字加1。核心思路是:定位数字位置 → 提取原始数值 → 拼接新字符串。
以下是一个健壮、可复用的 Python 实现:
def generate_numbered_lines(template: str, start: int = 1, count: int = 10, digit_pos: int = 4) -> list[str]:
"""
根据模板行生成带递增数字的多行字符串列表
:param template: 原始模板字符串,例如 "ABCD1EFGH"
:param start: 起始数字(默认为1)
:param count: 生成行数(默认为10)
:param digit_pos: 数字在字符串中的索引位置(默认为第5个字符,即索引4)
:return: 包含count行结果的字符串列表
"""
# 安全提取数字:支持多位数(如"ABCD12EFGH"),而不仅限于单数字
import re
match = re.search(r'\d+', template)
if not match:
raise ValueError("模板中未找到数字")
num_start, num_end = match.span()
prefix = template[:num_start]
suffix = template[num_end:]
base_num = int(match.group())
return [
f"{prefix}{base_num + i}{suffix}"
for i in range(start - base_num, start - base_num + count)
]
# 示例使用
template_line = "ABCD1EFGH"
lines = generate_numbered_lines(template_line, start=1, count=4)
for line in lines:
print(line)
输出:
ABCD1EFGH ABCD2EFGH ABCD3EFGH ABCD4EFGH
✅ 关键优势说明:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 使用正则 r'\d+' 自动识别连续数字(兼容 "ABCD10EFGH" 或 "ITEM-99-INFO" 等复杂格式);
- 不依赖固定索引(如 txt[4]),避免因数字位数变化导致越界错误;
- 返回列表便于后续写入文件:
with open("output.txt", "w", encoding="utf-8") as f: f.write("\n".join(lines))
⚠️ 注意事项:
- 若原始数字非纯整数(如含前导零 "ABCD001EFGH"),需额外处理格式化(例如用 f"{base_num + i:03d}" 保持三位补零);
- 处理大文件或多行模板时,建议封装为逐行处理函数,并加入异常捕获;
- Windows系统写入换行符请确保使用 \n(Python 默认 open(..., newline='') 已适配)。
掌握该方法后,你不仅能完成基础递增任务,还可轻松扩展为生成带时间戳、UUID、字母序号(A/B/C…)等多样化模板,大幅提升文本自动化处理效率。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










