码迷,mamicode.com
首页 > 编程语言 > 详细

Python Show-Me-the-Code 第 0020题 统计通话时长

时间:2015-06-01 11:36:00      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:python   表格处理   

第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 –> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年10月01日~2014年10月31日通话详单.xls 文件。写代码,对每月通话时间做个统计。


思路:

我的手机号是移动的,所以我选的是导出移动手机号某月的详单。打开表格文件发现每行的格式是:

序号 通话地 通话类型 对方号码 开始时间 通话时长 移动话费 长途话费

它的通话类型是包括套餐,主叫,被叫,上网流量之类的,通过这个我们可以知道那些行是属于通话的时间的。它的通话时长记录格式是hh:mm:ss,在这我把该字符串读出来并使用strptime解析它。Python time.strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。语法:time.strptime(string[, format]),其string为时间字符串,format为格式化字符串。逐行扫描表格,把每次的通话时间累加。


代码:

0020.统计通话时长.py

#!/usr/bin/env python
#coding: utf-8
import xlrd 
import time

# 存放文件的路径
filepath = ‘/home/bill/Desktop/list(201504).xls‘

def run():
    # 打开表格
    xls = xlrd.open_workbook(filepath)
    sheet = xls.sheet_by_index(0)
    initiative_call = 0
    passtive_call = 0
    # 遍历表格,查到类型为被叫或主叫的行,记录通话时长
    for i in range(3, sheet.nrows):
        rv = sheet.row_values(i)
        if rv[2] == u‘被叫‘:
            struct_time = time.strptime(rv[5], "%H:%M:%S")
            passtive_call += struct_time.tm_hour * 3600 + struct_time.tm_min * 60 + struct_time.tm_sec
        if rv[2] == u‘主叫‘:
            struct_time = time.strptime(rv[5], "%H:%M:%S")
            initiative_call += struct_time.tm_hour * 3600 + struct_time.tm_min * 60 + struct_time.tm_sec
    print ‘主叫时长:%d分钟‘ % (initiative_call/60)
    print ‘被叫时长:%d分钟‘ % (passtive_call/60)
    print ‘总通话时长:%d分钟‘ % ((passtive_call+initiative_call)/60)

if __name__ =="__main__":
    run()

技术分享

Python Show-Me-the-Code 第 0020题 统计通话时长

标签:python   表格处理   

原文地址:http://blog.csdn.net/huangxiongbiao/article/details/46300795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!