Python正则处理API返回的赛马数据格式化需求
Python 解析赛事赔率数据
问题描述
从API获取到如下格式的字符串数据,需要将其解析为结构化的字典列表:
input_str = "'224014@@@1;1=8.4=0;2=33=0;3=9.4=0@@@2;1=15=0;2=3.3=1;3=4.2=0;4=5.7=0;5=9.4=0;6=22=0@@@3;1=17=0;2=7.4=0;3=27=0@@@4;1=14=0;2=7.8=0;3=5.9=0;4=23=0;5=4.0=1'"
数据结构说明:
- 开头6位数字为更新时间(UPDATE TIME)
- 以
@@@X分隔不同赛事,X为赛事编号(Race No.) - 每个赛事后包含多匹马的数据,格式为
Horse_No=Odd=status(马匹编号=赔率=状态)
解析代码
以下Python代码可实现需求,无需正则表达式即可完成解析:
import json # 输入数据,先去除首尾的单引号 input_str = "'224014@@@1;1=8.4=0;2=33=0;3=9.4=0@@@2;1=15=0;2=3.3=1;3=4.2=0;4=5.7=0;5=9.4=0;6=22=0@@@3;1=17=0;2=7.4=0;3=27=0@@@4;1=14=0;2=7.8=0;3=5.9=0;4=23=0;5=4.0=1'" clean_str = input_str.strip("'") # 提取更新时间 updatetime = int(clean_str[:6]) # 拆分各赛事数据(跳过分割后第一个空元素) race_segments = clean_str[6:].split('@@@')[1:] result = [] for segment in race_segments: # 拆分赛事编号和马匹数据 race_info = segment.split(';') race_no = int(race_info[0]) horse_data_list = race_info[1:] # 处理每匹马的数据 for horse_data in horse_data_list: horse_no, odd, status = horse_data.split('=') result.append({ 'Race_No': race_no, 'Horse_No': int(horse_no), 'Odd': float(odd), 'status': int(status), 'updatetime': updatetime }) # 格式化输出结果 print(json.dumps(result, indent=2))
输出结果
运行代码后将得到如下结构化输出:
[ { "Race_No": 1, "Horse_No": 1, "Odd": 8.4, "status": 0, "updatetime": 224014 }, { "Race_No": 1, "Horse_No": 2, "Odd": 33.0, "status": 0, "updatetime": 224014 }, { "Race_No": 1, "Horse_No": 3, "Odd": 9.4, "status": 0, "updatetime": 224014 }, { "Race_No": 2, "Horse_No": 1, "Odd": 15.0, "status": 0, "updatetime": 224014 }, { "Race_No": 2, "Horse_No": 2, "Odd": 3.3, "status": 1, "updatetime": 224014 }, { "Race_No": 2, "Horse_No": 3, "Odd": 4.2, "status": 0, "updatetime": 224014 }, { "Race_No": 2, "Horse_No": 4, "Odd": 5.7, "status": 0, "updatetime": 224014 }, { "Race_No": 2, "Horse_No": 5, "Odd": 9.4, "status": 0, "updatetime": 224014 }, { "Race_No": 2, "Horse_No": 6, "Odd": 22.0, "status": 0, "updatetime": 224014 }, { "Race_No": 3, "Horse_No": 1, "Odd": 17.0, "status": 0, "updatetime": 224014 }, { "Race_No": 3, "Horse_No": 2, "Odd": 7.4, "status": 0, "updatetime": 224014 }, { "Race_No": 3, "Horse_No": 3, "Odd": 27.0, "status": 0, "updatetime": 224014 }, { "Race_No": 4, "Horse_No": 1, "Odd": 14.0, "status": 0, "updatetime": 224014 }, { "Race_No": 4, "Horse_No": 2, "Odd": 7.8, "status": 0, "updatetime": 224014 }, { "Race_No": 4, "Horse_No": 3, "Odd": 5.9, "status": 0, "updatetime": 224014 }, { "Race_No": 4, "Horse_No": 4, "Odd": 23.0, "status": 0, "updatetime": 224014 }, { "Race_No": 4, "Horse_No": 5, "Odd": 4.0, "status": 1, "updatetime": 224014 } ]
说明
- 代码通过字符串拆分实现,逻辑直观且易于维护
- 自动处理可变数量的赛事和马匹数据
- 将各字段转换为对应的数据类型(整数/浮点数)
内容的提问来源于stack exchange,提问作者smelling lady
相关产品推荐
相关产品推荐

