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 相关文章推荐
通过数据库向Django模型添加字段的示例
Jul 21 Python
python 切换root 执行命令的方法
Jan 19 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
python实现可逆简单的加密算法
Mar 22 Python
Python控制Firefox方法总结
Jun 03 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
Python unittest discover批量执行代码实例
Sep 08 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
JavaScript用Number方法实现string转int
2014/05/13 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
js面向对象的写法
2016/02/19 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
Python实现的矩阵类实例
2017/08/22 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
Python重新加载模块的实现方法
2018/10/16 Python
基于Python实现用户管理系统
2019/02/26 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
深入了解Python 变量作用域
2020/07/24 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
班委竞选演讲稿
2014/04/28 职场文书
创先争优公开承诺书
2014/08/30 职场文书
公务员政审材料
2014/12/23 职场文书
干部个人考察材料
2014/12/24 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python