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的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
浅谈Python peewee 使用经验
Oct 20 Python
python项目对接钉钉SDK的实现
Jul 15 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
python 实现分组求和与分组累加求和代码
May 18 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
教你怎么用Python操作MySql数据库
May 31 Python
django 认证类配置实现
Nov 11 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
PHP $_SERVER详解
2009/01/16 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
Python中的闭包总结
2014/09/18 Python
python之wxPython应用实例
2014/09/28 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Django forms组件的使用教程
2018/10/08 Python
python新手学习使用库
2020/06/11 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
.net面试题
2015/12/22 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
玲玲的画教学反思
2014/02/04 职场文书
国旗下的演讲稿
2014/05/08 职场文书
师范生自荐信模板
2014/05/28 职场文书
商场营业员岗位职责
2015/04/14 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js
Python面向对象之内置函数相关知识总结
2021/06/24 Python