如何用Python实战正则表达式提取数据并绘制图表?

2026-04-13 07:292阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1002个文字,预计阅读时间需要5分钟。

如何用Python实战正则表达式提取数据并绘制图表?

本期分享《Python实战系列》的第一篇文章:正则提取数据并绘图,主要来自粉丝的实际问题。后期会不断更新,希望对您有所帮助。如有疑问或需要改进的地方,欢迎私信。


本期给大家分享《Python实战系列》的第一篇文章:正则提取数据并绘图,该系列主要来自粉丝的实际问题,后期会不断更新,希望对你有所帮助,如有疑问或者需要改进的地方可以私信小编。
任务描述: 提取txt文件各语言数据绘制折线图,data.txt文件截图如下(太长了直截了一部分):

乍一看很像json格式的文件,实际上不是
进入正题:

?️‍? 1. 读取数据

如何用Python实战正则表达式提取数据并绘制图表?

with open('data.txt') as f: data = f.read()

?️‍? 2. 正则提取花括号{}里面的信息

datas = re.findall('({.*?})',data)

内容基本上就是编程语言各日期的占比情况,接下来就是提取日期信息和数据信息了。


?️‍? 3. 提取name,注意转义(')

re.findall('\'(.*)\'',datas[0])[0]

?️‍? 4. 提取日期和数据,注意数据小数点

re.findall('(\d+(\.\d+)?)',datas[0])

每4个数据为一组,所以做个step=4的循环即可:

for i in range(0,len(datas_tmp),4): datas_f.append(float(datas_tmp[i+3][0])) dates_f.append(f'{datas_tmp[i][0]}-{datas_tmp[i+1][0]}-{datas_tmp[i+2][0]}')

?️‍? 5. 数据提取部分完整代码

# 处理数据 with open('data.txt') as f: data = f.read() datas = re.findall('({.*?})',data) names = [] dates_result = [] datas_result = [] for idx,dd in enumerate(datas): datas_f = [] dates_f = [] name = re.findall('\'(.*)\'',dd)[0] names.append(name) datas_tmp = re.findall('(\d+(\.\d+)?)',dd) for i in range(0,len(datas_tmp),4): datas_f.append(float(datas_tmp[i+3][0])) dates_f.append(f'{datas_tmp[i][0]}-{datas_tmp[i+1][0]}-{datas_tmp[i+2][0]}') datas_result.append(datas_f) dates_result.append(dates_f)


?️‍? 6. 绘图

绘图部分直接用matplotlib的plot循环绘制即可,代码如下:

# 绘图 plt.figure(figsize=(20, 10), dpi=100) for i in range(len(names)): plt.plot(dates_result[i], datas_result[i], label=names[i]) ax = plt.gca() ax.xaxis.set_major_locator(ticker.MultipleLocator(20)) plt.ylabel("Ratings(%)", fontdict={'size': 16}) plt.title("TIOBE Programming Community Index", fontdict={'size': 20}) plt.legend(loc='best') plt.grid(True, linestyle='--', alpha=0.5) plt.show()


本文共计1002个文字,预计阅读时间需要5分钟。

如何用Python实战正则表达式提取数据并绘制图表?

本期分享《Python实战系列》的第一篇文章:正则提取数据并绘图,主要来自粉丝的实际问题。后期会不断更新,希望对您有所帮助。如有疑问或需要改进的地方,欢迎私信。


本期给大家分享《Python实战系列》的第一篇文章:正则提取数据并绘图,该系列主要来自粉丝的实际问题,后期会不断更新,希望对你有所帮助,如有疑问或者需要改进的地方可以私信小编。
任务描述: 提取txt文件各语言数据绘制折线图,data.txt文件截图如下(太长了直截了一部分):

乍一看很像json格式的文件,实际上不是
进入正题:

?️‍? 1. 读取数据

如何用Python实战正则表达式提取数据并绘制图表?

with open('data.txt') as f: data = f.read()

?️‍? 2. 正则提取花括号{}里面的信息

datas = re.findall('({.*?})',data)

内容基本上就是编程语言各日期的占比情况,接下来就是提取日期信息和数据信息了。


?️‍? 3. 提取name,注意转义(')

re.findall('\'(.*)\'',datas[0])[0]

?️‍? 4. 提取日期和数据,注意数据小数点

re.findall('(\d+(\.\d+)?)',datas[0])

每4个数据为一组,所以做个step=4的循环即可:

for i in range(0,len(datas_tmp),4): datas_f.append(float(datas_tmp[i+3][0])) dates_f.append(f'{datas_tmp[i][0]}-{datas_tmp[i+1][0]}-{datas_tmp[i+2][0]}')

?️‍? 5. 数据提取部分完整代码

# 处理数据 with open('data.txt') as f: data = f.read() datas = re.findall('({.*?})',data) names = [] dates_result = [] datas_result = [] for idx,dd in enumerate(datas): datas_f = [] dates_f = [] name = re.findall('\'(.*)\'',dd)[0] names.append(name) datas_tmp = re.findall('(\d+(\.\d+)?)',dd) for i in range(0,len(datas_tmp),4): datas_f.append(float(datas_tmp[i+3][0])) dates_f.append(f'{datas_tmp[i][0]}-{datas_tmp[i+1][0]}-{datas_tmp[i+2][0]}') datas_result.append(datas_f) dates_result.append(dates_f)


?️‍? 6. 绘图

绘图部分直接用matplotlib的plot循环绘制即可,代码如下:

# 绘图 plt.figure(figsize=(20, 10), dpi=100) for i in range(len(names)): plt.plot(dates_result[i], datas_result[i], label=names[i]) ax = plt.gca() ax.xaxis.set_major_locator(ticker.MultipleLocator(20)) plt.ylabel("Ratings(%)", fontdict={'size': 16}) plt.title("TIOBE Programming Community Index", fontdict={'size': 20}) plt.legend(loc='best') plt.grid(True, linestyle='--', alpha=0.5) plt.show()