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中用函数作为返回值和实现闭包的教程
Apr 27 Python
详解Python爬虫的基本写法
Jan 08 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
centos7之Python3.74安装教程
Aug 15 Python
Python上下文管理器用法及实例解析
Nov 11 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
Python3如何在服务器打印资产信息
Aug 27 Python
python Scrapy爬虫框架的使用
Jan 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 session应用实例 登录验证
2009/03/16 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
同事吵架检讨书
2014/02/05 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
分层教学实施方案
2014/03/19 职场文书
公司离职证明标准样本
2014/10/05 职场文书
尼克胡哲观后感
2015/06/08 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL