psutil 和资源库输出到文件使用正则表达式解析文件并获取数字

psutil and resource library output to file parse the file using regex and get the number

我使用了 psutil 和资源库并将输出打印到文件,

下面给出的文本文件的输出:

image of the output file

before argument parser:

   svmem(total=13653602304, available=12436942848, percent=8.9, used=916492288, free=8878428160, active=1242267648, inactive=3044110336, buffers=85274624, cached=3773407232, shared=36450304, slab=231096320)
   resource.struct_rusage(ru_utime=2.053535, ru_stime=0.378084, ru_maxrss=362036, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=49977, ru_majflt=813, ru_nswap=0, ru_inblock=215944, ru_oublock=752, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=1610, ru_nivcsw=216)`

after argument parser:

svmem(total=13653602304, available=12436942848, percent=8.9, used=916492288, free=8878428160, active=1242267648, inactive=3044110336, buffers=85274624, cached=3773407232, shared=36450304, slab=231096320)
resource.struct_rusage(ru_utime=2.054735, ru_stime=0.378084, ru_maxrss=362036, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=49977, ru_majflt=813, ru_nswap=0, ru_inblock=215944, ru_oublock=752, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=1610, ru_nivcsw=216)

after grabing the paths:

svmem(total=13653602304, available=12423421952, percent=9.0, used=930283520, free=8858972160, active=1260138496, inactive=3047149568, buffers=85520384, cached=3778826240, shared=36450304, slab=231239680)
resource.struct_rusage(ru_utime=2.062864, ru_stime=0.381083, ru_maxrss=362296, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=50058, ru_majflt=813, ru_nswap=0, ru_inblock=215944, ru_oublock=752, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=1831, ru_nivcsw=217)

我只想获取数字并将其打印到这样的 csv 文件中:

total,available,percent,used,free,active,inactive,buffers,cached,shared,slab,ru_utime, ru_stime,ru_maxrss,ru_ixrss,ru_idrss,ru_isrss,ru_minflt,ru_majflt,ru_nswap,ru_inblock, ru_oublock,ru_msgsnd,ru_msgrcv,ru_nsignals,ru_nvcsw,ru_nivcsw 13653602304,12423421952,9.0,930283520,8858972160,1260138496,3047149568,85520384,3778826240, 36450304,231239680,2.062864,0.381083,362296,0,0,0,50058,813,0,215944,752,0,0,0,1831,217

我知道它使用的是正则表达式,但我对正则表达式的了解有限,我该如何完成这样的壮举?之前谢谢

This may suit your needs

ps =  """after grabing the paths: svmem(total=13653602304, available=12423421952, percent=9.0, used=930283520, free=8858972160, active=1260138496, inactive=3047149568, buffers=85520384, cached=3778826240, shared=36450304, slab=231239680) resource.struct_rusage(ru_utime=2.062864, ru_stime=0.381083, ru_maxrss=362296, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=50058, ru_majflt=813, ru_nswap=0, ru_inblock=215944, ru_oublock=752, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=1831, ru_nivcsw=217)"""

import re
import csv

value = [[i for i in re.findall("=(\S+[ 0-9]?)[,)]", ps)]]
name = re.findall("(\w+)=", ps)

with open('datas.csv', 'w') as f:
    write = csv.writer(f)
    write.writerow(name)
    write.writerows(value)

输出:

total,available,percent,used,free,active,inactive,buffers,cached,shared,slab,ru_utime,ru_stime,ru_maxrss,ru_ixrss,ru_idrss,ru_isrss,ru_minflt,ru_majflt,ru_nswap,ru_inblock,ru_oublock,ru_msgsnd,ru_msgrcv,ru_nsignals,ru_nvcsw,ru_nivcsw

13653602304,12423421952,9.0,930283520,8858972160,1260138496,3047149568,85520384,3778826240,36450304,231239680,2.062864,0.381083,362296,0,0,0,50058,813,0,215944,752,0,0,0,1831,217

截图:

这是我写的最终代码,也许你们中的一些人想要它作为参考:

代码如下:

import re
import csv

data = [] 
with open('TerminalHasilUjiCoba.txt','r') as f:
lines_ = f.read()
lines = lines_.split('\n ')

for line in lines:
  total = re.findall("total=(\S+[0-9]?)[,)]", line)[0]
  available = re.findall("available=(\S+[0-9]?)[,)]", line)[0]
  percent = re.findall("percent=(\S+[0-9]?)[,)]", line)[0]
  used = re.findall("used=(\S+[0-9]?)[,)]", line)[0]
  free = re.findall("free=(\S+[0-9]?)[,)]", line)[0]
  active = re.findall("active=(\S+[0-9]?)[,)]", line)[0]
  inactive = re.findall("inactive=(\S+[0-9]?)[,)]", line)[0]
  buffers = re.findall("buffers=(\S+[0-9]?)[,)]", line)[0]
  cached = re.findall("cached=(\S+[0-9]?)[,)]", line)[0]
  shared = re.findall("shared=(\S+[0-9]?)[,)]", line)[0]
  slab = re.findall("slab=(\S+[0-9]?)[,)]", line)[0]
  ru_stime = re.findall("ru_stime=(\S+[0-9]?)[,)]", line)[0]
  ru_maxrss = re.findall("ru_maxrss=(\S+[0-9]?)[,)]", line)[0]
  ru_ixrss = re.findall("ru_ixrss=(\S+[0-9]?)[,)]", line)[0]
  ru_idrss = re.findall("ru_idrss=(\S+[0-9]?)[,)]", line)[0]
  ru_isrss = re.findall("ru_isrss=(\S+[0-9]?)[,)]", line)[0]
  ru_minflt = re.findall("ru_minflt=(\S+[0-9]?)[,)]", line)[0]
  ru_majflt = re.findall("ru_majflt=(\S+[0-9]?)[,)]", line)[0]
  ru_nswap = re.findall("ru_nswap=(\S+[0-9]?)[,)]", line)[0]
  ru_inblock = re.findall("ru_inblock=(\S+[0-9]?)[,)]", line)[0]
  ru_oublock = re.findall("ru_oublock=(\S+[0-9]?)[,)]", line)[0]
  ru_msgsnd = re.findall("ru_msgsnd=(\S+[0-9]?)[,)]", line)[0]
  ru_msgrcv = re.findall("ru_msgrcv=(\S+[0-9]?)[,)]", line)[0]
  ru_nsignals = re.findall("ru_nsignals=(\S+[0-9]?)[,)]", line)[0]
  ru_nvcsw = re.findall("ru_nvcsw=(\S+[0-9]?)[,)]", line)[0]
  ru_nivcsw = re.findall("ru_nivcsw=(\S+[0-9]?)[,)]", line)[0]
  row = [total, available, percent, used, free, active, inactive, buffers, cached, shared, slab, ru_stime, ru_maxrss, ru_ixrss, ru_idrss, ru_isrss, ru_minflt, ru_majflt, ru_nswap, ru_inblock, ru_oublock, ru_msgsnd, ru_msgrcv, ru_nsignals, ru_nvcsw, ru_nivcsw]
  data.append(row)

name = ["total", "available", "percent", "used", "free", "active", "inactive", "buffers", "cached", "shared", "slab", "ru_stime", "ru_maxrss", "ru_ixrss", "ru_idrss", "ru_isrss", "ru_minflt", "ru_majflt", "ru_nswap", "ru_inblock", "ru_oublock", "ru_msgsnd", "ru_msgrcv", "ru_nsignals", "ru_nvcsw", "ru_nivcsw"]
with open('datas2.csv', 'w') as f:
  write = csv.writer(f)
  write.writerow(name)
  for row in data:
    write.writerow(row)