如何使用Python解析单行长文本赛跑成绩生成pandas DataFrame
赛跑成绩文本解析实现方案
核心思路是通过正则表达式从规则结构化的单行文本中批量提取字段,几行代码即可完成转换,全程不需要手动拆分处理文本。
具体步骤
- 导入依赖库:仅需要正则库
re和pandas - 读取TXT文本文件的原始内容
- 编写正则规则捕获三个目标字段
- 将匹配结果转换为DataFrame,可按需做数据类型转换适配后续绘图需求
完整代码示例
import re import pandas as pd # 读取本地TXT文件,替换为你自己的文件路径即可 with open("race_result.txt", "r", encoding="utf-8") as f: raw_content = f.read().strip() # 正则匹配规则:三个捕获组分别对应排名、姓名(含可选的俱乐部信息)、成绩 # 兼容有无俱乐部括号、姓名与成绩间有无空格的所有情况 pattern = r"(\d+)\.\s+([^\d]+?)\s*(\d+\'\d+\")" matched_data = re.findall(pattern, raw_content) # 直接生成目标DataFrame race_df = pd.DataFrame(matched_data, columns=["Rank", "Name", "Time"]) # 可选:字段类型转换,方便后续排序、计算和绘图 race_df["Rank"] = race_df["Rank"].astype(int) # 把字符串格式的成绩转换为总秒数,绘图时可以直接作为数值轴使用 race_df["total_seconds"] = race_df["Time"].apply( lambda x: int(x.split("'")[0]) * 60 + int(x.split("'")[1].replace('"', "")) )
结果验证
用你提供的示例数据运行后,输出的race_df前三行内容如下,完全匹配字段要求:
| Rank | Name | Time | total_seconds |
|---|---|---|---|
| 1 | ESCALE (AIX ATHLE PROVENCE) | 34'49" | 2089 |
| 2 | BAYARD (LPM) | 36'13" | 2173 |
| 3 | MARTINEZ (MAIRIE AIX-EN-PROVENCE) | 36'20" | 2180 |
内容的提问来源于stack exchange,提问作者Ghjaseppu
相关产品推荐
相关产品推荐

