【问题标题】:Pulling out specific values from a string in Python从 Python 中的字符串中提取特定值
【发布时间】:2020-08-20 09:02:17
【问题描述】:

所以我从一个文件中读取了一些关于程序运行时间的数据。文本文件看起来像这样重复的“块”:

real 1m49.296s user 1m40.597s sys 0m7.979s

我需要提取“user”和“sys”行中的分钟和秒值以便总结它们。到目前为止,我有一个用于文件中这些“块”数量的 for 循环,并且我正在逐行读取,将真实、用户和 sys 行保存到不同的字符串变量中。然而,我不认为这是一个很好的方法,因为它需要我硬编码“块”的数量。显然我对此很陌生,感谢任何帮助!

【问题讨论】:

  • 你能展示你拥有的代码吗?即使你认为它不是很好,它至少展示了一些可以改进的地方。

标签: python string file


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    相关资源
    最近更新 更多