首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python智能搜索添加数字

Python智能搜索添加数字
EN

Stack Overflow用户
提问于 2015-01-18 16:28:10
回答 4查看 73关注 0票数 0

我已经创建了一个脚本,它为我以这种格式所做的工作输出时间表:

代码语言:javascript
复制
To:     JOE DOE

Client:     JOE DOE

Case #:     14-M-123        Charge: BREAKING AND ENTERING

----------------------------------------------------------------------------



12-12-12    research                1.2 hrs 89 miles
        Another task 
        yet another task

12-12-13    Conf. w/ magistrate ct          1.8 hrs 88 miles

11-11-11    Yadayada                0.0 hrs 10 miles

是否有一种简单的方法来搜索每个文件,并分别添加小时和英里列?

我假设你会使用正则表达式?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-18 16:37:10

代码语言:javascript
复制
import re
text = file('filename').read()
numbers = re.findall(r'([0-9.]+) hrs ([0-9]+) miles', text)
hours = sum(float(x[0]) for x in numbers)
miles = sum(int(x[1]) for x in numbers)

像这样的东西应该管用。

它所做的是在文本中搜索一个数字的实例(可以选择小数位),后面是hrs,另一个实例(没有小数位)后面跟着miles

我做了几个假设,比如在数字和它们的标签之间,以及在两列之间有一个空格,英里总是整数,而小时不是整数,但希望您可以根据需要进行调整。

票数 1
EN

Stack Overflow用户

发布于 2015-01-18 16:45:03

一旦您的文件始终采用相同的格式,split将正常工作:

代码语言:javascript
复制
with open("in.txt") as f:
    tot_miles = 0
    tot_hrs = 0
    for line in f:
        line = line.rstrip()
        if line.endswith("miles"):
            spl = line.rsplit(None,4)
            h, m = spl[1],spl[3]
            tot_miles += int(m)
            tot_hrs += float(h)
    print("Total hrs = {}\nTotal miles = {}".format(tot_hrs,tot_miles))

Total hrs = 3.0
Total miles = 187
票数 2
EN

Stack Overflow用户

发布于 2015-01-18 16:51:06

我会反过来问一个不同的问题:你的脚本输出这些时间表,对吗?源数据仍然可用吗?如果是这样的话,如果您可以在模板中添加额外的列来重新生成时间表,那么它将更加可靠。正则表达式和其他解析将更加困难和耗时,更不用说将来更新脚本时的易碎性了。

每当我编写报表生成脚本时,我都会添加标志来重新生成以前的数据,就好像它是在给定的日期上运行一样。(这也使测试变得更容易。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28012023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档