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

