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 相关文章推荐
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python 数据结构之队列的实现
Jan 22 Python
python flask中静态文件的管理方法
Mar 20 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
python3.4中清屏的处理方法
Jul 06 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
python实现简单遗传算法
Sep 18 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
python 经纬度求两点距离、三点面积操作
Jun 03 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
咖啡与牛奶
2021/03/03 冲泡冲煮
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
Django中几种重定向方法
2015/04/28 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
python实现聊天小程序
2018/03/13 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
python获取url的返回信息方法
2018/12/17 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
开业主持词
2014/03/21 职场文书
音乐节策划方案
2014/06/09 职场文书
2014年法务工作总结
2014/12/11 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers