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

Python从文本文件生成嵌套字典时读取异常问题求助

问题原因
  • 多余的f.read()语句:文件对象读取时会维护内部指针,for line in f本身就会逐行读取内容、自动后移指针,循环内额外加f.read()会把当前行之后的所有内容一次性读完,指针直接跳到文件末尾,下一轮循环没有内容可读取,因此只能拿到第一行数据。
  • 字段拆分逻辑错误:你已经用split("=")拆分出了用户名k和详情值部分v,但后续拆分|分隔符时直接用整行line拆分,会导致拆分出来的元素包含开头的用户名和=符号,索引对应错位;同时data_dict没有在循环内部初始化,会导致前一行的数据残留,出现重复问题。
  • 输出格式不符:原代码直接打印整个大字典,不符合预期的单用户字典逐行输出的要求。
修复后的代码
with open("something.txt", 'r') as f:
    user_data = {}
    for line in f:
        line = line.strip()
        # 跳过文件中的空行
        if not line:
            continue
        # 拆分用户名和详情内容
        username, detail_str = line.split("=")
        # 拆分详情字段,注意要对value做去空格处理
        detail_list = detail_str.strip().split('|')
        # 每次循环初始化新的用户信息字典,避免数据残留
        info_dict = {
            "Full Name": detail_list[1],
            "Date of Birth": detail_list[2],
            "Phone Number": detail_list[3],
            "Identification Card (IC) Number": detail_list[4],
            "Emergency Contact Number": detail_list[5],
            "Credit /Debit Card Details ": detail_list[6]
        }
        user_data[username.strip()] = info_dict

# 按预期格式逐行输出单个用户的字典
for user, info in user_data.items():
    print({user: info})
运行输出
{'shanm': {'Full Name': 'Shanmugaraja', 'Date of Birth': '09/04/2002', 'Phone Number': '0149606345', 'Identification Card (IC) Number': '020409140817', 'Emergency Contact Number': '0102393345', 'Credit /Debit Card Details ': '4770 4848 0109 0294'}}
{'jiken': {'Full Name': 'Soo Jiken', 'Date of Birth': '08/06/2000', 'Phone Number': '0149600239', 'Identification Card (IC) Number': '020908140213', 'Emergency Contact Number': '011349780', 'Credit /Debit Card Details ': '8900 2828 1129 0889'}}

注:你预期输出中jiken的Full Name写的是Soo Ji属于笔误,按测试文件原文输出为Soo Jiken。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:18:03