Python实战系列 | 正则提取数据并绘图

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

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

???? 1. 读取数据

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()

大理的洱海形如人耳,风平浪静时,

Python实战系列 | 正则提取数据并绘图

相关文章:

你感兴趣的文章:

标签云: