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

Python3.10读取文本记录时每条记录重复输出7次问题咨询

问题根本原因
  • 代码中record_data_list.append(string_builder)的缩进位置错误:它被放在了拆分单行字段的内层for循环中,每拆分1个字段就会向结果列表追加一次当前的string_builder。单条有效记录共包含7个字段,因此每条记录会被重复添加7次。
  • 附加隐含问题:string_builder是可变的列表对象,循环中追加的是同一个对象的引用,后续拆分字段时修改string_builder,之前已经追加到列表里的内容也会同步更新,最终列表内的7次重复项都会变成拆分完成的完整记录,因此打印时会出现相同内容重复输出7次的现象。
修复方案

调整append操作的缩进位置,等整行所有字段拆分完成后再追加到结果列表即可,修正后的代码参考如下:

record_data_list = []

def read_file():
    # 用with上下文管理器自动处理文件关闭,避免资源泄漏
    with open('RECORD_DATA.txt', 'r', encoding='utf-8') as infile:
        for row in infile:
            start = 0
            string_builder = []
            # 跳过注释行和空行
            if not row.startswith('#') and row.strip():
                for index in range(len(row)):
                    if row[index] == ',' or index == len(row) - 1:
                        string_builder.append(row[start:index].strip())
                        start = index + 1
                # 【关键修改】整行拆分完成后再追加,放在内层循环外
                record_data_list.append(string_builder)

def print_summary():
    for i in record_data_list:
        print(', '.join(i)) # 用逗号分隔输出,和预期格式一致

read_file()
print_summary()

如果不需要手动实现字段拆分逻辑,也可以直接用Python字符串内置的split方法简化代码:

if not row.startswith('#') and row.strip():
    string_builder = [item.strip() for item in row.split(',')]
    record_data_list.append(string_builder)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:54:01