使用正则表达式读取文本数据【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()

运行程序后即可得到图像

相关推荐
疋瓞1 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
C语言小火车1 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
北冥you鱼1 小时前
abigen 最佳实践:从入门到精通,高效生成 Go 语言合约绑定
开发语言·golang·区块链
ALex_zry2 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
如此这般英俊2 小时前
手搓Claude Code-第六章 subagent
数据结构·人工智能·python·语言模型·自然语言处理
她说..3 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
元Y亨H3 小时前
Python - FastAPI 全方位介绍
python·fastapi
忧郁的紫菜3 小时前
基础实现:单篇 Markdown 转 Word
开发语言·c#·word
甜美的小天鹅3 小时前
Swifter C#之inline还是不inline,这是个问题
开发语言·c#
小短腿的代码世界3 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构