当前位置: 首页 > article >正文

使用正则表达式读取文本数据【Python】

使用正则表达式读取文本数据

假如我们需要处理的数据具有很强的规律性, 例如下面这样, 数据基本上都是一个独立的一行, 并且每个数据都有名称标志.

RUN 

 OU = 1.903784

 OV = 1.862293

 OW = 1.860681

 OUINV = 548.000793
 
 STOP 
 
 index = 1

 V = 0.000000

 W = 0.000000

 E_theta = 0.000000

 UINV = 0.000000

 fault_flag= 0

 index = 2

 V = -0.025882

 W = 0.044830

 E_theta = -0.523599

 UINV = 0.000000

 fault_flag= 0

 index = 3

 V = 0.220001

 W = -0.201728

 E_theta = 2.312893

 UINV = 0.000000

 fault_flag= 0

假设我们需要提取E_theta = 后面的数据并绘制为图像, 使用手工处理耗费大量的人力和时间, 这时我们可以用python脚本快速完成这一功能. 以下为详细步骤

1、导入所需要的库

import re                                       # 导入正则表达式模块库
import matplotlib.pyplot as plt

导入正则表达式re库和绘制图像常用的matplotlib
repython自带;
matplotlib需要用户自己安装, 使用以下命令可安装该库

pip install matplotlib

2、读取存储原始数据的文本文件

# 从文件中读取数据
file_path = 'data.txt'              # 替换为你的文件路径

# 以只读模式打开文件
# 通常使用默认编码来读取文件, 如果使用其他编码, 可以指定encoding参数
with open(file_path, 'r') as file:
    data = file.read()              # 读取文件的全部内容, 并返回一个字符串
    

如果文件使用GBK编码, 则可以这样写

with open(file_path, 'r', encoding='gbk') as file:
    data = file.read()

with 用于管理文件的上下文, 可以确保文件在使用后自动关闭, 即使在读取文件发生异常时也是如此.
r 表示以只读模式打开文件.

3、使用正则表达式提取数据

# 

# re.findall(pattern,string) 在字符串中搜索所有匹配的模式, 如果匹配成功则返回一个匹配对象
# \s*       匹配任何空白字符, 包括空格、制表符、换行符等
# *         表示匹配前面的字符0次或多次
#           用于处理E_theta和 = 之间可能存在的任意数量的空格
# ([-\d.]+) 
# ()        表示捕获组, 用于提取匹配的部分
# [-\d.]    是一个字符集, 匹配以下任意一个字符
# -         匹配负号
# \d        匹配任何数字
# .         匹配小数点
# +         表示匹配前面的字符集1次或多次
#           [RegExr: Learn, Build, & Test RegEx](https://regexr.com/)
# \b        表示单词边界匹配符, 确保E_theta是一个独立的单词, 防止匹配到带有前缀和后缀的单词

e_theta_values = re.findall(r'\bE_theta\s*=\s*([-\d.]+)', data)

# 将提取的字符串转换为浮点数
e_theta_values = [float(value) for value in e_theta_values]

# 输出 E_theta 数据
print("E_theta 数据:")
for value in e_theta_values:
    print(value)

4、使用matplotlib绘制曲线

# 绘制图像

# marker='o',       表示指定数据点的标记类型为圆圈o
# linestyle='-',    指定线的样式为实线
# color='r'         指定线的颜色为红色

plt.plot(e_theta_values, marker='o', linestyle='-', color='r', label='E_theta')
plt.title('E_theta data change')            # 设置图表的标题
plt.xlabel('index')                         # 设置X轴标签内容
plt.ylabel('E_theta value')                 # 设置Y轴标签内容
plt.grid(True)                              # 显示网格
plt.legend()                                # 显示图例
plt.show()

运行程序后即可得到图像


http://www.kler.cn/a/501169.html

相关文章:

  • ASP.NET Core与GraphQL集成
  • 【Linux网络编程】数据链路层 | MAC帧 | ARP协议
  • 鼠标过滤驱动
  • Mysql--基础篇--多表查询(JOIN,笛卡尔积)
  • 爬虫基础之爬取歌曲宝歌曲批量下载
  • 如何用SQL语句来查询表或索引的行存/列存存储方式|OceanBase 用户问题集锦
  • 【记录基于Python tkinter的音乐播放器的实现过程】
  • NS3学习——fifth基础上运行tcpVegas算法(附完整源码)
  • Qt天气预报系统获取天气数据
  • STM32: 输入捕获基本结构
  • 阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启
  • 【深度学习】Pytorch:加载自定义数据集
  • java导出pdf文件
  • idea系列---【idea中的Debug常用功能】
  • 【漫话机器学习系列】046.弹性网络(Elastic Net)
  • 《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(一)
  • 解读Linux Bridge中的东西流向与南北流向
  • MySQL教程之:常见查询示例
  • TCP 套接字 方法
  • 【Linux】Linux命令
  • wow-agent 学习笔记
  • Bytebase 3.1.2 - 在 SQL 编辑器中为表、列和 PG 的视图注释显示鼠标悬浮提示
  • 了解Node.js
  • 【JavaSE】【网络协议】HTTPS
  • 《安富莱嵌入式周报》第348期:开源低功耗测试仪,开源创意万用表,续航100-300小时,开源PCB电机,自制shell和网络协议栈,开源水培自动化系统
  • MySQL核心揭秘:InnoDB存储引擎深度探索