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

刚好用的是联通呢,科科。

Ok,拿到数据了,保存为文件“comu.xls”,现在打算:

1. 统计通话总时长

2. 统计主叫和被叫次数

3. 统计通话总费用

4. pip了matplotlib,试着把数据做成图表(白pip了,py3自带pylab里包含了matplotlib)

嗯,下面开工!

Code:

import xlrd
import re
from pylab import * def get_xls_data(filename): # 读取xls数据
book = xlrd.open_workbook(filename)
sheet = book.sheet_by_index(0)
content = {}
for i in range(sheet.nrows):
content[i+1] = sheet.row_values(i)[1:]
#print(content[i+1]) print("Liez的3月话费单:") # 统计话费
cost = 0
for i in range(sheet.nrows-1):
cost += float(content[i+2][7])
print("通话费:", round(cost, 2),"元") # 统计被叫主叫次数
call = 0
becall = 0
for i in range(sheet.nrows-1):
if(content[i+2][3] == "主叫"):
call += 1
else:
becall += 1
total = call + becall
print("主叫",call,"次,被叫",becall,"次,共计",total,"次通话") # 统计通话时间
time = {}
for i in range(sheet.nrows-1):
time[i] = content[i+2][1]
day = {}
for i in range(31):
day[i+1] = 0
rday = re.compile('-(\d+?) ')
for i in range(sheet.nrows-1):
daycompile = rday.findall(content[i+2][1])
t = int(daycompile[0])
day[t] += 1
daytimes = (list(day.values()))
dates = (list(day.keys())) # 统计通话时长
sec = 0
min = 0
for i in range(sheet.nrows-1):
rsec = re.compile('(\d+)秒')
rmin = re.compile('(\d+)分')
seci = rsec.findall(content[i+2][2])
mini = rmin.findall(content[i+2][2])
sec += int(seci[0])
if(len(mini)==1):
min += int(mini[0])
if(sec >= 60):
t = sec / 60
sec = sec % 60
min = min + t
print("通话时长:%d分%d秒"%(min,sec)) #三月日通话次数统计图
plt.plot(dates, daytimes)
grid(True)
title("Call Times Every Day")
plt.show() #根据被叫主叫次数作饼状图
figure(2, figsize=(6,6))
fracs = [call/total, becall/total] # 饼状图按被叫和主叫分成两部分的比例
labels = 'Call', 'Becall'
pie(fracs, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90, colors = ("b", "y"))
title("Call & Becall")
show() get_xls_data("comu.xls")

输出:

  Liez的3月话费单:
  通话费:15.15 元
  主叫 45 次,被叫 64 次,共计 109 次通话
  通话时长:193分40秒

两个图表:

ps:感觉这题除了麻烦还是麻烦= - =好在正则表达式用得开始溜起来啦(ง •̀ω•́)ง

【python小练】0020的更多相关文章

  1. 【python小练】0013

    第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 科科...妹子就算了,大晚上的爬点吃的吧.食物图集:抿一口,舔一舔,扭一扭~·SCD 写个简单的爬图爬虫 ...

  2. 【python小练】0014题 和 0015 题

    第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...

  3. 【python小练】0010

    第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...

  4. 【python小练】0005

    第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 首先,iphone5的分辨率是1136x640. if条件句判断横(纵)向是否大于对应的ipho ...

  5. 【python小练】0004

    第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数. 先回忆一下各种括号的用途: () tuple [] list {} dict ([]) set——需要一个list作为输入合集 c ...

  6. 【python小练】0002

    第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. . . .(一脸懵逼) Python访问数据库:(廖雪峰python教程) 1. SQLi ...

  7. 【python小练】0001

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? # coding ...

  8. python小练--使用正则表达式将json解析成dict

    练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...

  9. python 小练手

    监控 主动监控 - 服务器端轮询客户端 被动监控-客户端agent上报到服务器端 混合模式---两种都支持 需求 1个性化的监控需求 2每个服务的监控间隔不同 3混合模式的监控

随机推荐

  1. MYSQL主从复制制作配置方案

    1. 主从复制机器配置 操作系统:centos7 x64 基于vagrant下的virtual box的虚拟机两台 master ip:192.168.21.11, slave ip 192.168. ...

  2. 关于python的GIL全局解释器锁的简单理解

    GIL是解释器内部的一把锁,确切一点说是CPython解释器内部的一把锁,所以要注意区分 这和我们在Python代码中使用线程锁Lock并不是一个层面的概念. 1. GIL产生的背景: 在CPytho ...

  3. InnoDB,5项最佳实践,知其所以然?

    InnoDB,5项最佳实践,知其所以然? 原创: 58沈剑 架构师之路 昨天 缓存讲了一个月<缓存架构,一篇足够>.今天,开始写数据库. 第一篇,说说MySQL两个最常用的存储引擎,MyI ...

  4. Flask 应用上下文

    应用上下文(application context) 它的字面意思是 应用上下文,但它不是一直存在的,它只是request context 中的一个对 app 的代理(人),所谓local proxy ...

  5. 详解python的垃圾回收机制

    python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式 ...

  6. adb导出安卓 把手机内存文件导入到电脑里 adb安装软件

    记得先找对路劲adb shellls 最上面的ls: ./ 打头的没有权限.而下面的这些acct sdcard等 都有权限. 然后cd sdcardls 看下目录,发现gxm文件夹在sdcard下面. ...

  7. 关于处理iis8.0中设置Request.BinaryRead 不允许操作的解决方法

    iis6.0解决方案: 起初我刚开始上传的是小文件运行都是正常的,后来我弄个文件大点的上传看程序运行怎么样?就上面的问题,在网上搜索正好找到跟我一样的问题,拿过来自己记录下.其中行62指的是:oUpF ...

  8. (四点共面) 51nod1265 四点共面

    1265 四点共面 1 秒 131,072 KB 0 分 基础题   给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面).如果共面,输出"Ye ...

  9. http协议中的请求方式

    get:获取url传的查询字符串(action=show)表单和连接的url中传的值.容量2K左右. post:以post方式提交,获取表单和连接的url中传的值.容量8M左右. delete:删除某 ...

  10. 一名全栈设计师的Mac工具箱(设计,开发,效率)

        我喜欢把自己定义为一个会一些设计的全栈工程师.在一些大型企业项目中,我一般担任架构师的角色,而到了我自己负责的个人或开源项目中,我就成了一名全栈设计师.我喜欢用自学而来的那些设计技能进行网站或 ...