gpt4 book ai didi

python - 逐行读取文本文件并存储匹配 Python 中特定模式的变量

转载 作者:行者123 更新时间:2023-11-30 22:08:51 25 4
gpt4 key购买 nike

我们有一个很大的日志文件,包含以下两行:

00 LOG     |   Cycles Run:  120001
00 LOG ! Virtual: Max> ?????????? bytes (?.???? gb), Current> 640733184 bytes (?.???? gb).

00 LOG ! Virtual: Max> 1082470400 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).

00 LOG ! Actual: Max> ????????? bytes (?.???? gb), Current> 472154112 bytes (?.???? gb).

00 LOG ! Actual: Max> 861736960 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).

由于日志文件很大,我们希望逐行读取(而不是一次读取缓冲区中的整个文本),匹配特定的模式集并在单独的变量中选择值。

例如

00 LOG     |   Cycles Run:  120001

我们希望选择 120001 并将其存储在变量 cycle 中。

另一方面,我们解析这些行:

00 LOG     ! Virtual: Max> ?????????? bytes (?.???? gb), Current> 640733184 bytes (?.???? gb).

00 LOG ! Virtual: Max> 1082470400 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).

00 LOG ! Actual: Max> ????????? bytes (?.???? gb), Current> 472154112 bytes (?.???? gb).

00 LOG ! Actual: Max> 861736960 bytes (?.???? gb), Current> ????????? bytes (?.???? gb).

标有?的字符可以是任何数字。

我们想要存储如下所示的变量:

640733184 in var virtual_cur

1082470400 in var virtual_max

472154112 in var actual_cur

861736960 in var actual_max

Python 3.6编写了一个片段,但它打印了空列表:

import re

filename = "test.txt"
with open(filename) as fp:
line = fp.readline()
while line:
cycle_num = re.findall(r'00 LOG | Cycles Run: (.*?)',line,re.DOTALL)
line = fp.readline()

print (cycle_num[0])

NOTE: I want to pick each values in seperate variables and use itlater on. Need to set 5 patterns one by one, pick value if it matchesany specific pattern and put it inrespective variable.

不确定第二个模式的通配符匹配。

请建议我们一种有效地做到这一点的方法。

最佳答案

使用正则表达式

(?:(?:Cycles Run:[ \t]+)|(?:Current>[ \t]+))(\d+)

Demo

您可以按照以下方式做一些事情:

import re
pat=re.compile(r'(?:(?:Cycles Run:[ \t]+)|(?:Current>[ \t]+))(\d+)')
with open('test.txt','r') as f:
for line_num, line in enumerate(f):
m=pat.search(line)
if m:
print(line_num, m.group(0))

关于python - 逐行读取文本文件并存储匹配 Python 中特定模式的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com