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

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

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

txt 复制代码
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、导入所需要的库

python 复制代码
import re                                       # 导入正则表达式模块库
import matplotlib.pyplot as plt

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

cmd 复制代码
pip install matplotlib

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

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

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

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

python 复制代码
with open(file_path, 'r', encoding='gbk') as file:
    data = file.read()

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

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

python 复制代码
# 

# 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绘制曲线

python 复制代码
# 绘制图像

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

运行程序后即可得到图像

相关推荐
geovindu10 小时前
CSharp: LogHelper
开发语言·后端·c#·.net
奈斯先生Vector10 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
冻柠檬飞冰走茶10 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
Jay-r10 小时前
手势粒子特效系统 Gesture Particle FX(附源码下载)
python·ai·编程·pygame·百度云·手势控制
额恩6610 小时前
ResearchPilot 第三阶段总结报告
python·算法
红叶舞10 小时前
基于线段树的数据结构
数据结构·python·算法
创世宇图11 小时前
Video2Txt:160 行代码实现本地视频转文字
python·faster-whisper·video2txt·large-v3-turbo
Richard.Wong11 小时前
qt生成dll供C#调用
开发语言·qt
wang_xin_88811 小时前
PHP函数
开发语言·php
Immortal__y11 小时前
php函数
开发语言·php