匹配文件对象中的多行正则表达式

2023-11-25

如何从文件对象 (data.txt) 中提取此正则表达式中的组?

import numpy as np
import re
import os
ifile = open("data.txt",'r')

# Regex pattern
pattern = re.compile(r"""
                ^Time:(\d{2}:\d{2}:\d{2})   # Time: 12:34:56 at beginning of line
                \r{2}                       # Two carriage return
                \D+                         # 1 or more non-digits
                storeU=(\d+\.\d+)
                \s
                uIx=(\d+)
                \s
                storeI=(-?\d+.\d+)
                \s
                iIx=(\d+)
                \s
                avgCI=(-?\d+.\d+)
                """, re.VERBOSE | re.MULTILINE)

time = [];

for line in ifile:
    match = re.search(pattern, line)
    if match:
        time.append(match.group(1))

代码最后一部分的问题是我逐行迭代,这显然不适用于多行正则表达式。我尝试过使用pattern.finditer(ifile)像这样:

for match in pattern.finditer(ifile):
    print match

...只是为了看看它是否有效,但 finditer 方法需要一个字符串或缓冲区。

我也尝试过这个方法,但是无法实现

matches = [m.groups() for m in pattern.finditer(ifile)]

任何想法?


在 Mike 和 Tuomas 发表评论后,我被告知要使用 .read() ..像这样:

ifile = open("data.txt",'r').read()

这工作正常,但是这是搜索文件的正确方法吗?无法让它工作...

for i in pattern.finditer(ifile):
    match = re.search(pattern, i)
    if match:
        time.append(match.group(1))

Solution

# Open file as file object and read to string
ifile = open("data.txt",'r')

# Read file object to string
text = ifile.read()

# Close file object
ifile.close()

# Regex pattern
pattern_meas = re.compile(r"""
                ^Time:(\d{2}:\d{2}:\d{2})   # Time: 12:34:56 at beginning of line
                \n{2}                       # Two newlines
                \D+                         # 1 or more non-digits
                storeU=(\d+\.\d+)           # Decimal-number
                \s
                uIx=(\d+)                   # Fetch uIx-variable
                \s
                storeI=(-?\d+.\d+)          # Fetch storeI-variable
                \s
                iIx=(\d+)                   # Fetch iIx-variable
                \s
                avgCI=(-?\d+.\d+)           # Fetch avgCI-variable
                """, re.VERBOSE | re.MULTILINE)

file_times = open("output_times.txt","w")
for match in pattern_meas.finditer(text):
    output = "%s,\t%s,\t\t%s,\t%s,\t\t%s,\t%s\n" % (match.group(1), match.group(2), match.group(3), match.group(4), match.group(5), match.group(6))
    file_times.write(output)
file_times.close()

也许它可以写得更紧凑和Pythonic....


您可以使用以下命令将文件对象中的数据读取到字符串中ifile.read()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匹配文件对象中的多行正则表达式 的相关文章

随机推荐

  • 如何在 AS3 中创建自定义 MouseEvent.CLICK 事件(将参数传递给函数)?

    这个问题不仅与 MouseEvent CLICK 事件类型有关 而且与 AS3 中已存在的所有事件类型有关 我阅读了很多有关自定义事件的内容 但直到现在我还不知道如何做我想做的事情 我将尝试解释一下 希望您能理解 这是我的情况的说明 for
  • 使用 ifort 进行数组复制时程序崩溃

    这个程序崩溃了Illegal instruction 4在 MacOSX Lion 和 ifort IFORT 12 1 0 20111011 上 program foo real pointer a b allocate a 5400 5
  • 在画布中拖动时图像闪烁

    我正在画布中拖动图像 但在拖动过程中图像会闪烁 我认为函数调用存在一些问题 我已经实现了 onmousedown onmouseup 和 onmousemove 事件的功能 我在拖动过程中将图像绘制到画布上 这是我的代码 div div
  • 如何在 C++ 中重复字符串多次?

    我想在 C 中的字符串开头插入 n 个空格 或任何字符串 有没有直接的方法可以使用 std strings 或 char 字符串来执行此操作 例如 在 Python 中你可以简单地做 gt gt gt 5 lolcat lolcat 在重复
  • 如何获取进程ID来杀死nohup进程? [关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 我正在服务器上运行 nohup 进程 当我尝试杀死它时 我的腻子控制台会关闭 这是我尝试查找进程 ID 的方法 ps ef grep nohup 这是杀死命令 kill 9 17
  • 如何保持对话框中的沉浸模式?

    当我的活动显示自定义对话框时 如何维护新的沉浸模式 我使用下面的代码来维护对话框中的沉浸模式 但是使用该解决方案 当我启动自定义对话框时 导航栏会出现不到一秒钟 然后就会消失 以下视频更好地解释了该问题 当导航栏出现时 请查看屏幕底部 ht
  • Flutter:Streambuilder 导致 Firestore 上的读取次数过多

    我正在尝试构建一个简单的报价 Flutter 应用程序 在其中显示报价列 表并允许用户 喜欢 报价 我正在为此使用 Streambuilder 我的问题是 Firestore 使用仪表板显示的读取次数非常多 每个用户几乎 300 次 即使我
  • 服务帐号需要哪些预定义 IAM 角色才能完成 Google Cloud Run 快速入门:构建和部署?

    我想将 Google Cloud Run 与 Google App Engine 和 Google Cloud Functions 进行比较 云跑快速入门 构建和部署似乎是一个很好的起点 我的应用程序默认凭据太宽泛 无法在开发过程中使用 我
  • 如何在离散BarChart nvd3.js上设置y轴上的域和比例

    我在我的一个应用程序中使用 d3 js 图表 他们在这张图片中 看Charts 对于货币图表上的 Y 轴 参见图片 我希望最大值四舍五入为 400 无论这里的最大条形大小是多少 它都是 358 72 美元 但我想将条形保持在 358 72
  • 在RecyclerView中显示SQLite数据

    我搜索了很多 但没有找到任何有关如何在 RecyclerView 中显示 SQLite 数据的分步指南 谁能向我解释我该怎么做 My 数据库适配器 public class DataBaseAdapter DataBaseHelper he
  • SQL CE 最大长度

    我需要在 WP7 应用程序中存储文章 我只想使用数据库 这样我就可以通过未读的文章等进行查询 我在 Mango 中遇到了 SQL CE 的一个大问题 似乎有 4000 个字符的限制 而我的文章是 4200 个 而这还不是最大的问题 如果有的
  • T-SQL 中“\”和“$”的用法是什么?

    正如我发现的 在 SQL Server 书籍中 Backslash Transact SQL 将长字符串常量分成两行或更多行以提高可读性 and SELECT Clause Transact SQL IDENTITY ROWGUID And
  • 将元数据存储在 CSV 文件中

    我知道这是对 CSV 格式的滥用 我确实明白更合适的解决方案是导出xls xlsx文件 或为用户提供 OData 端点并让他们使用 power hub 检索数据 此时我想坚持使用 CSV 因为它更容易实现 我需要将平面行列表 报告 导出为
  • 如何最好地在 C# 中实现可公开访问的常量

    在 C 中实现可公开访问的常量似乎有三种选择 我很好奇是否有任何充分的理由选择其中之一 或者这只是个人喜好问题 Choice 1 私有字段加上属性获取器 private const string someConstant string th
  • 如何将表单添加到控制台应用程序以便用户可以选择文件?

    我创建了一个控制台应用程序并让它按照我想要的方式工作 使用VS2010中的 添加项目 gt 添加Windows窗体 选项 它已经自动创建了我需要的内容 我添加了一个按钮和代码来检索 Excel 文件 如下 我的问题是 我如何获取他们创建的文
  • 在 Open ES iPhone 应用程序中使用 VAO 围绕 VBO 会导致调用 glDrawElements 时 EXC_BAD_ACCESS

    我正在尝试将我的代码提升到一个新的水平 遵循 Apple 的一些最佳实践 我尝试围绕我的顶点缓冲区对象 VBO 实现顶点数组对象 我像这样设置我的 VBO 和 VAO void setupVBOs glBindBuffer GL ARRAY
  • 如何使用Python在屏幕上绘制一个空矩形

    我不是专家 我试图在屏幕上显示一个矩形 该矩形从固定起点开始跟随鼠标移动 就像您在文字或绘画中选择某些内容一样 我带着这个代码 import win32gui m win32gui GetCursorPos while True n win
  • 如何将 ATL/MFC CString 转换为 QString?

    鉴于项目的编码可能是 Unicode 但不确定 将 ATL CString 转换为 QString 的最佳方法是什么 我想到的是这样的 CString c T SOME TEXT std basic string
  • 将 Guice 组件集成到 Spring 应用程序中

    我们有一个基于 Spring 框架的应用程序 需要集成使用 Google Guice 构建的组件 有人能给我们一些关于如何做到这一点的建议吗 我们遇到了以下链接 展示了如何将 Spring 集成到 Guice 中 但我们需要相反的方式 ht
  • 匹配文件对象中的多行正则表达式

    如何从文件对象 data txt 中提取此正则表达式中的组 import numpy as np import re import os ifile open data txt r Regex pattern pattern re comp