【python小练】0020
第 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的更多相关文章
- 【python小练】0013
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 科科...妹子就算了,大晚上的爬点吃的吧.食物图集:抿一口,舔一舔,扭一扭~·SCD 写个简单的爬图爬虫 ...
- 【python小练】0014题 和 0015 题
第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...
- 【python小练】0010
第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...
- 【python小练】0005
第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 首先,iphone5的分辨率是1136x640. if条件句判断横(纵)向是否大于对应的ipho ...
- 【python小练】0004
第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数. 先回忆一下各种括号的用途: () tuple [] list {} dict ([]) set——需要一个list作为输入合集 c ...
- 【python小练】0002
第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. . . .(一脸懵逼) Python访问数据库:(廖雪峰python教程) 1. SQLi ...
- 【python小练】0001
第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? # coding ...
- python小练--使用正则表达式将json解析成dict
练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...
- python 小练手
监控 主动监控 - 服务器端轮询客户端 被动监控-客户端agent上报到服务器端 混合模式---两种都支持 需求 1个性化的监控需求 2每个服务的监控间隔不同 3混合模式的监控
随机推荐
- 编写高质量代码:改善Java程序的151个建议 --[52~64]
编写高质量代码:改善Java程序的151个建议 --[52~64] 推荐使用String直接量赋值 Java为了避免在一个系统中大量产生String对象(为什么会大量产生,因为String字符串是程序 ...
- mysql 远程连接 10038
1,先确认本地是否能连上本地能连上就对用户进行授权 mysql>grant all privileges on *.* to 'root'@'%' identified by 'youpassw ...
- 安装PHP ImageMagick笔记
安装过程 $ pecl install imagick 当提示Please provide the prefix of Imagemagick installation [autodetect] :直 ...
- sha256加密
sha256: 1.使用npm安装 :npm install js-sha256 2.然后在组件中methods定义方法,在调用 // sha256加密密码 setSha(){ let sha256 ...
- Vue--路由
main.js: 1.先在项目安装路由模块:npm install vue-router --save-dev2.使用路由:main.js首先要引用vue模块: import Vue from 'vu ...
- Python加载声音
对于音频的操作可以使用pygame包中的sound 和 music对象进行音乐播放. Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文件. Music对象出来可以播放OGG.WAV音频外 ...
- Cookie隐藏小广告
方式一:在close.php页面上设置COOKIE, colse.php页面 <?php setcookie('hide','1'); header('Location: indes.php') ...
- Python之偏函数
学前知识储备: 函数在Python是第一类对象 (Python中一切皆对象). 第一类对象的特性: ----1.可以被引用 ----2.可以当做参数传入 ----3.可以当做函数返回值 ----4.可 ...
- CentOS7用阿里云Docker Yum源在线安装Docker 17.03.2
参考文档 安装步骤 删除已安装的Docker 配置阿里云Docker Yum源 安装指定版本 启动Docker服务 参考文档 官方Docker安装文档:https://docs.docker. ...
- 关于indexOf,charAt,subString的区别
@Test public void indexOf() { // 注意:在Unicode表中A-Z的十进制对应:65-90 // a-z的进制对应:97-122 // 0-9的十进制对应:48-57 ...