使用python从文本中搜索和提取值
给定以下使用python从文本中搜索和提取值,python,Python,给定以下Jtree内存段: print (resptext) SENT: Ukern command: show jtree 0 memory Jtree memory segment 0 (Context: 0x45bdc9c8) ------------------------------------------- Memory Statistics: 16777216 bytes total 7591528 bytes used 9181968 bytes ava
Jtree内存段
:
print (resptext)
SENT: Ukern command: show jtree 0 memory
Jtree memory segment 0 (Context: 0x45bdc9c8)
-------------------------------------------
Memory Statistics:
16777216 bytes total
7591528 bytes used
9181968 bytes available (9155584 bytes from free pages)
3528 bytes wasted
192 bytes unusable
32768 pages total
14751 pages used (2571 pages used in page alloc)
135 pages partially used
17882 pages free (max contiguous = 17846)
Jtree memory segment 1 (Context: 0x45c5ed20)
Memory Statistics:
16777216 bytes total
13462008 bytes used
3304560 bytes available (3281408 bytes from free pages)
2432 bytes wasted
8216 bytes unusable
32768 pages total
26220 pages used (8970 pages used in page alloc)
139 pages partially used
6409 pages free (max contiguous = 6409)
Context: 0x43bd2958
目标:
总字节数
和使用的字节数
- 段0=已使用字节/可用字节=45.45%
- 段_1=已使用字节/可用字节=80.24%
- 我已设法提取并打印这些值,但无法对段0内存利用率和段1执行计算操作
- 迄今为止的产出:
我可以保持这个简单。筛选行中您关心的值,然后将内容压缩在一起:
segment_lines = (line for line in resptext if "Jtree memory segment" in line)
used_lines = (line for line in resptext if "bytes used" in line)
avail_lines = (line for line in resptext if "bytes available" in line)
segment_values = (int(line.split(" ")[3]) for line in segment_lines)
used_values = (int(line.split(" ")[0]) for line in used_lines)
avail_values = (int(line.split(" ")[0]) for line in avail_lines)
segment_values = {
segment: {"used": used, "available": avail}
for segment, used, avail in zip(
segment_values, used_values, avail_values
)
}
为什么不使用正则表达式呢?这更简单!你可以测试你的正则表达式。我处理过日志数据,正则表达式对我帮助很大。阐明了问题的目的
7591528
13462008
segment_lines = (line for line in resptext if "Jtree memory segment" in line)
used_lines = (line for line in resptext if "bytes used" in line)
avail_lines = (line for line in resptext if "bytes available" in line)
segment_values = (int(line.split(" ")[3]) for line in segment_lines)
used_values = (int(line.split(" ")[0]) for line in used_lines)
avail_values = (int(line.split(" ")[0]) for line in avail_lines)
segment_values = {
segment: {"used": used, "available": avail}
for segment, used, avail in zip(
segment_values, used_values, avail_values
)
}