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 25 Python
探究数组排序提升Python程序的循环的运行效率的原因
Apr 01 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
详解Python中is和==的区别
Mar 21 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
使用python3 实现插入数据到mysql
Mar 02 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
Django 实现jwt认证的示例
Apr 30 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 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
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
php实现简单文件下载的方法
2015/01/30 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
对pandas中to_dict的用法详解
2018/06/05 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
接口可以包含哪些成员
2012/09/30 面试题
护理专业推荐信
2013/11/07 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
考核评语大全
2014/04/29 职场文书
收款委托书
2014/10/14 职场文书
公务员考察材料范文
2014/12/23 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python