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网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python实现根据文件关键字进行切分为多个文件的示例
Dec 10 Python
python多线程并发实例及其优化
Jun 27 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
通过实例解析python描述符原理作用
Jan 22 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Django用户身份验证完成示例代码
Apr 03 Python
python3 配置logging日志类的操作
Apr 08 Python
详解Python中namedtuple的使用
Apr 27 Python
快速创建python 虚拟环境
Nov 28 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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命令行使用方法和命令行参数说明
2014/04/08 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
jquery学习笔记之无new构建详解
2017/12/07 jQuery
菊花转动的jquery加载动画效果
2018/08/19 jQuery
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
深入浅析python的第三方库pandas
2020/02/13 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Python while true实现爬虫定时任务
2020/06/08 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
Prototype如何更新局部页面
2013/03/03 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
药学专业大学生个人的自我评价
2013/11/04 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
导游词之广西漓江
2019/11/02 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers