如何实现doc.txt中重复计数编码字符串的解码并写入doc1.txt?
重复计数编码字符串解码实现方案
完整修复代码
def decode_txt(origin, destination): # 使用with语句自动管理文件资源,无需手动关闭 with open(origin, "r") as f, open(destination, "w") as h: # 读取源文件内容并去除首尾空白字符(如换行、空格) encoded_content = f.read().strip() decoded_parts = [] current_digits = [] for char in encoded_content: if char.isdigit(): # 收集连续的数字字符(支持多位数计数,比如10A) current_digits.append(char) else: # 转换数字为整数,无数字时默认重复1次 repeat_count = int(''.join(current_digits)) if current_digits else 1 # 将字符重复对应次数后加入结果列表 decoded_parts.append(char * repeat_count) # 重置数字收集器,准备处理下一组 current_digits = [] # 拼接所有解码后的片段并写入目标文件 h.write(''.join(decoded_parts))
关键逻辑说明
- 文件资源管理:用
with语句操作文件,会在代码块执行完毕后自动关闭文件,避免资源泄漏问题,比手动调用close()更可靠。 - 解码核心逻辑:
- 用
current_digits列表收集连续的数字字符,兼容多位数计数场景(比如12B会被解码为BBBBBBBBBBBB)。 - 遍历编码字符串时,遇到数字就存入
current_digits,遇到字母则将之前收集的数字转为整数,把字母重复对应次数后存入结果列表。 - 处理无数字的单个字符(比如示例中的
T):此时current_digits为空,默认重复1次,直接保留原字符。
- 用
- 性能优化:用列表
decoded_parts存储解码片段,最后用''.join()拼接,比直接拼接字符串更高效(Python中字符串不可变,多次拼接会生成新对象,列表拼接仅需一次内存分配)。
测试验证
如果源文件doc.txt内容为2A4CT2A2C,执行函数后doc1.txt会生成内容:AACCCCTAACC,完全符合预期。
内容的提问来源于stack exchange,提问作者vanquish
相关产品推荐
相关产品推荐

