第 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()
时间: 2024-10-09 20:28:31