python - 从 Python 中的字符串中提取特定值
问题描述
所以我正在从一个文件中读取一些关于程序运行时间的数据。文本文件看起来像这样重复的“块”:
real 1m49.296s
user 1m40.597s
sys 0m7.979s
我需要提取“user”和“sys”行中的分钟和秒值以便总结它们。到目前为止,我有一个用于文件中这些“块”数量的 for 循环,并且我正在逐行读取,将真实、用户和 sys 行保存到不同的字符串变量中。但是,我认为这不是一个好方法,因为它需要我硬编码“块”的数量。显然我对此很陌生,任何帮助表示赞赏!
解决方案
Regular expression
是你的朋友。
https://docs.python.org/3/library/re.html
检查匹配组部分:
(...)
匹配括号内的任何正则表达式,并指示组的开始和结束;组的内容可以在执行匹配后检索,并且可以稍后在字符串中使用 \number 特殊序列进行匹配,如下所述。要匹配文字 '(' 或 ')',请使用 ( 或 ),或将它们包含在字符类中:[(], [)]。
由于您已经知道如何阅读文本文件。下面是一个示例,显示如何解析文本并进行计算
import re
foo = """real 1m49.296s
user 1m40.597s
sys 0m7.979s
"""
total_sec = 0
for item in foo.splitlines():
m = re.search(r"(real|user)\s+(\S+)m(\S+)s", item)
if m:
print(m.group(1), m.group(2), m.group(3))
total_sec += (float(m.group(2))*60+float(m.group(3)))
print("total %f" % total_sec)
结果:
('real', '1', '49.296')
total 109.296000
('user', '1', '40.597')
total 209.893000
推荐阅读
- r - R - 转换数据
- python - 烧瓶_pickle.PicklingError:
- c# - 带有 Azure Function V2 的 SendGrid 邮件程序
- dnsmasq - 如何使用 DNSmasq 配置 Prosody IM 以在两台计算机之间进行通信
- css - 为什么使用 em 字体大小会破坏行高?
- safari - 为什么我在此 AppleScript 上出现语法错误以重新加载 Safari 中的所有选项卡?
- python - 从用户输入运行命令
- java - 尝试使用 SharedPreferences 从 AmbilWarnaDialog 保存颜色,但没有获得颜色
- python - 如何不在最后一个元素后添加分隔符
- jmeter - Jmeter-将运行时数据写入 csv(column) 文件