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实现堆排序的方法详解
May 03 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
python数字图像处理之高级形态学处理
Apr 27 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
python中logging模块的一些简单用法的使用
Feb 22 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 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二维数组用键名分组相加实例函数
2013/11/06 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
表单JS弹出填写提示效果代码
2011/04/16 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
js自定义回调函数
2015/12/13 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
python机器学习之决策树分类详解
2017/12/20 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
python实现大学人员管理系统
2019/10/25 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
十一个高级MySql面试题
2014/10/06 面试题
初一体育教学反思
2014/01/29 职场文书
课例研修方案
2014/05/31 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
2016年主题党日活动总结
2016/04/05 职场文书