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

