Python读取xlsx文件的实现方法


Posted in Python onJuly 04, 2019

脚本如下:

from openpyxl import load_workbook

workbook = load_workbook(u'/tmp/test.xlsx')  #找到需要xlsx文件的位置
booksheet = workbook.active         #获取当前活跃的sheet,默认是第一个sheet

#如果想获取别的sheet页采取下面这种方式,先获取所有sheet页名,在通过指定那一页。
# sheets = workbook.get_sheet_names() # 从名称获取sheet
# booksheet = workbook.get_sheet_by_name(sheets[0])

#获取sheet页的行数据
rows = booksheet.rows
#获取sheet页的列数据
columns = booksheet.columns


i = 0
# 迭代所有的行
for row in rows:
  i = i + 1
  line = [col.value for col in row]
  cell_data_1 = booksheet.cell(row=i, column=3).value        #获取第i行1 列的数据
  cell_data_2 = booksheet.cell(row=i, column=4).value        #获取第i行 2 列的数据
  cell_data_3 = booksheet.cell(row=i, column=8).value          #获取第i行 3 列的数据
  cell_data_4 = booksheet.cell(row=i, column=18).value          #获取第i行 4 列的数据
  print (cell_data_1, cell_data_2, cell_data_3, cell_data_4)

实例:python读取excel数据做分类统计

某excel中记录了某个人的通话记录,下面程序将按照通话地点,通话类型等统计通话时间

# -*- coding:utf-8 -*-
import xlrd
import datetime
infos=[]
info_file=xlrd.open_workbook('src.xls')#打开excel文件
info_sheet=info_file.sheets()[0]#通过索引顺序获取工作表
row_count=info_sheet.nrows#获取行数,列数ncols
for row in range(1,row_count):
  time_string=info_sheet.cell(row,3).value
  time_s_sp=time_string.split(':')
  infos.append(#该数组里放了row_count个字典
    {
      'type':info_sheet.cell(row,2).value,#获取单元格,通话类型,主叫被叫
      'other_cellphone':info_sheet.cell(row,0).value,#对方号码,
      'timespan':datetime.timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
      'gpscity':info_sheet.cell(row,5).value#通话是本地还是外地
    }
  )
time_all=datetime.timedelta(seconds=0)#初始化
time_types={}
time_classes={}
time_numbers={}
for infor in infos:#取出该数组里的字典
  time_all +=infor['timespan']#求总通话次数
  infor_type=infor['type']
  if infor_type in time_types:
    time_types[infor_type]+=infor['timespan']
  else:
    time_types[infor_type]=infor['timespan']#按通话类型统计通话时间
  infor_class=infor['gpscity']
  if infor_class in time_classes:
    time_classes[infor_class]+=infor['timespan']
  else:
    time_classes[infor_class]=infor['timespan']#这里相当于先分类赋值再++,按归属地统计通话时间
  infor_number=infor['other_cellphone']
  if infor_number in time_numbers:
    time_numbers[infor_number]+=infor['timespan']
  else:
    time_numbers[infor_number]=infor['timespan']#根据号码统计通话时间

print '总通话时间:%s' % time_all
print
print '总通话方式分类'
for k,v in time_types.items():
  print k.encode('utf-8'),v
print
print '通话类型分类:'
for k,v in time_classes.items():
  print k.encode('utf-8'),v
print
print '对方号码分类:'
for k,v in time_numbers.items():
  print k,v

再优化下代码

# -*- coding:utf-8 -*-
import xlrd
from datetime import timedelta
def read_excel(file_excel):#读excel并将需要的数据分类放在数组里
  infos=[]
  info_file=xlrd.open_workbook(file_excel)
  info_sheet=info_file.sheets()[0]
  row_count=info_sheet.nrows
  for row in range(1,row_count):
    time_string=info_sheet.cell(row,3).value
    time_s_sp=time_string.split(':')
    infos.append(
      {
        'type':info_sheet.cell(row,2).value,
        'other_cellphone':info_sheet.cell(row,0).value,
        'timespan':timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
        'gpscity':info_sheet.cell(row,5).value

      }
    )
  return infos
def count_cell(list_dirs,infotype):#统计总通话及分类统计结果,存在字典里
  result_dir={}
  time_all=timedelta(seconds=0)
  for list_dir in list_dirs:
    time_all +=list_dir['timespan']
    info_type = list_dir[infotype]
    if info_type not in result_dir:
      result_dir[info_type]=list_dir['timespan']
    else:
      result_dir[info_type]+=list_dir['timespan']
  return time_all,result_dir
def print_result(result_dir):#打印数据
  for k,v in result_dir.items():
    print k.encode('utf-8'),v

if __name__=="__main__":
  list_dirs=read_excel('src.xls')
  time_all,result_type=count_cell(list_dirs,'type')
  result_cell=count_cell(list_dirs,'other_cellphone')
  result_gpscity = count_cell(list_dirs, 'gpscity')
  print '总通话时间:%s' % time_all
  print '按照通话类型分类:'
  print_result(result_type)
  print '按照号码分类:'
  print_result(result_cell[1])
  print '按照归属地分类:'
  print_result(result_gpscity[1])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的类方法和静态方法
Dec 13 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Python获取某一天是星期几的方法示例
Jan 17 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
python把转列表为集合的方法
Jun 28 Python
python3.7简单的爬虫实例详解
Jul 08 Python
python字典的遍历3种方法详解
Aug 10 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 Python
python 如何调用 dubbo 接口
Sep 24 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
Python使用scapy模块发包收包
May 07 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 Python
使用python进行广告点击率的预测的实现
Jul 04 #Python
python命令行工具Click快速掌握
Jul 04 #Python
python 设置输出图像的像素大小方法
Jul 04 #Python
python变量命名的7条建议
Jul 04 #Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 #Python
python批量修改图片尺寸,并保存指定路径的实现方法
Jul 04 #Python
python代理工具mitmproxy使用指南
Jul 04 #Python
You might like
mysql建立外键
2006/11/25 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
2014年五四青年节活动策划书
2014/04/22 职场文书
应届生找工作求职信
2014/06/24 职场文书
动物科学专业求职信
2014/07/27 职场文书
嘉宾邀请函
2015/01/31 职场文书
高中物理教学反思
2016/02/19 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android