如何读取文件提取各Client ID的主副号码并生成JSON串
解决方案:读取主副号码文件并生成目标JSON
我来帮你搞定这个需求!针对你提到的读取primary.txt和secondary.txt、提取每个Client ID对应的主副号码并生成JSON字符串的需求,这里有个实用的Python实现方案,完全适配你说的多Client ID、每个ID对应50-60个号码的场景:
实现思路
- 读取两个文件的内容,将文件内的类字典字符串安全转换为Python字典
- 收集所有唯一的Client ID,避免遗漏仅存在于单个文件中的ID
- 为每个ID整合对应的主、副号码列表,构建统一的数据结构
- 将最终结构转换为格式化的JSON字符串(也可直接保存到文件)
完整代码实现
import ast import json # 读取并解析primary.txt文件 with open('primary.txt', 'r', encoding='utf-8') as f: primary_raw = f.read().strip() primary_data = ast.literal_eval(primary_raw) # 读取并解析secondary.txt文件 with open('secondary.txt', 'r', encoding='utf-8') as f: secondary_raw = f.read().strip() secondary_data = ast.literal_eval(secondary_raw) # 收集所有存在的Client ID(确保覆盖两个文件中的所有ID) all_client_ids = set(primary_data.keys()).union(set(secondary_data.keys())) # 构建目标数据结构 client_number_list = [] for client_id in all_client_ids: client_entry = { "client_id": client_id, "primary_numbers": primary_data.get(client_id, []), # 无对应ID时返回空列表 "secondary_numbers": secondary_data.get(client_id, []) } client_number_list.append(client_entry) # 生成格式化的JSON字符串 output_json = json.dumps(client_number_list, indent=4) # 可选:将JSON写入文件保存 with open('client_numbers.json', 'w', encoding='utf-8') as f: f.write(output_json) # 打印结果 print("生成的JSON内容:") print(output_json)
代码关键点说明
- 安全解析文件内容:使用
ast.literal_eval()替代eval(),既能正确解析类字典字符串,又能避免执行恶意代码,更安全可靠 - 全ID覆盖:通过集合的
union()方法合并两个文件的Client ID,确保不会遗漏仅出现在其中一个文件的ID - 容错处理:用
dict.get()方法获取号码列表,若某个ID在其中一个文件中不存在,会返回空列表,保证JSON结构的一致性 - 格式化输出:
json.dumps()的indent=4参数让JSON内容排版整齐,方便阅读;如果需要紧凑格式,可去掉该参数
示例输出(基于你提供的测试数据)
运行代码后,会生成如下JSON字符串:
[ { "client_id": 1, "primary_numbers": [0, 273, 546, 819], "secondary_numbers": [342, 1102, 608, 684] }, { "client_id": 2, "primary_numbers": [274, 1, 820], "secondary_numbers": [115, 191, 837, 1559] }, { "client_id": 3, "primary_numbers": [1016, 275, 821], "secondary_numbers": [1256, 116] } ]
注意事项
- 如果你的文件使用非UTF-8编码,可在
open()函数中指定encoding参数(比如encoding='gbk') - 无论Client ID是整数还是字符串类型,代码都能自动识别并正确处理
- 针对每个ID50-60个号码、多ID的场景,该方案内存占用低、处理效率高,完全能满足需求
内容的提问来源于stack exchange,提问作者user1950349
相关产品推荐
相关产品推荐

