Python读取Excel的方法实例分析


Posted in Python onJuly 11, 2015

本文实例讲述了Python读取Excel的方法。分享给大家供大家参考。具体如下:

今天需要从一个Excel文档(.xls)中导数据到数据库的某表,开始是手工一行行输的。后来想不能一直这样,就用Python写了下面的代码,可以很方便应对这种场景。比如利用我封装的这些方法可以很方便地生成导入数据的SQL。 当然熟悉Excel编程的同学还可以直接用VBA写个脚本生成插入数据的SQL。

还可以将.xls文件改为.csv文件,然后通过SQLyog或者Navicat等工具导入进来,但是不能细粒度控制(比如不满足某些条件的某些数据不需要导入,而用程序就能更精细地控制了;又比如重复数据不能重复导入;还有比如待导入的Excel表格和数据库中的表的列不完全一致) 。

我的Python版本是3.0,需要去下载xlrd 3: http://pypi.python.org/pypi/xlrd3/ 然后通过setup.py install命令安装即可

import xlrd3
'''
author: jxqlove?
本代码主要封装了几个操作Excel数据的方法
'''
''' 
获取行视图
根据Sheet序号获取该Sheet包含的所有行,返回值类似[ ['a', 'b', 'c'], ['1', '2', '3'] ]
sheetIndex指示sheet的索引,0表示第一个sheet,依次类推
xlsFilePath是Excel文件的相对或者绝对路径
'''
def getAllRowsBySheetIndex(sheetIndex, xlsFilePath):
  workBook = xlrd3.open_workbook(xlsFilePath)
  table = workBook.sheets()[sheetIndex]
  rows = []
  rowNum = table.nrows # 总共行数
  rowList = table.row_values
  for i in range(rowNum):
    rows.append(rowList(i)) # 等价于rows.append(i, rowLists(i))
  return rows
'''
获取某个Sheet的指定序号的行
sheetIndex从0开始
rowIndex从0开始
'''
def getRow(sheetIndex, rowIndex, xlsFilePath):
  rows = getAllRowsBySheetIndex(sheetIndex, xlsFilePath)
  return rows[rowIndex]
''' 
获取列视图
根据Sheet序号获取该Sheet包含的所有列,返回值类似[ ['a', 'b', 'c'], ['1', '2', '3'] ]
sheetIndex指示sheet的索引,0表示第一个sheet,依次类推
xlsFilePath是Excel文件的相对或者绝对路径
'''
def getAllColsBySheetIndex(sheetIndex, xlsFilePath):
  workBook = xlrd3.open_workbook(xlsFilePath)
  table = workBook.sheets()[sheetIndex]
  cols = []
  colNum = table.ncols # 总共列数
  colList = table.col_values
  for i in range(colNum):
    cols.append(colList(i))
  return cols
'''
获取某个Sheet的指定序号的列
sheetIndex从0开始
colIndex从0开始
'''
def getCol(sheetIndex, colIndex, xlsFilePath):
  cols = getAllColsBySheetIndex(sheetIndex, xlsFilePath)
  return cols[colIndex]
'''
获取指定sheet的指定行列的单元格中的值
'''
def getCellValue(sheetIndex, rowIndex, colIndex, xlsFilePath):
  workBook = xlrd3.open_workbook(xlsFilePath)
  table = workBook.sheets()[sheetIndex]
  return table.cell(rowIndex, colIndex).value # 或者table.row(0)[0].value或者table.col(0)[0].value
if __name__=='__main__':
  rowsInFirstSheet = getAllRowsBySheetIndex(0, './产品.xls')
  print(rowsInFirstSheet)
  colsInFirstSheet = getAllColsBySheetIndex(0, './产品.xls')
  print(colsInFirstSheet)
  print(getRow(0, 0, './产品.xls'))
  # 获取第一个sheet第一行的数据
  print(getCol(0, 0, './产品.xls'))
  # 获取第一个sheet第一列的数据
  print(getCellValue(0, 3, 2, './产品.xls'))
  # 获取第一个sheet第四行第二列的单元格的值

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
简单理解Python中基于生成器的状态机
Apr 13 Python
举例简单讲解Python中的数据存储模块shelve的用法
Mar 03 Python
python如何查看系统网络流量的信息
Sep 12 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
Python3.5 创建文件的简单实例
Apr 26 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 Python
5个pandas调用函数的方法让数据处理更加灵活自如
Apr 24 Python
Python实现分割文件及合并文件的方法
Jul 10 #Python
Python写入数据到MP3文件中的方法
Jul 10 #Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 #Python
Python自动登录126邮箱的方法
Jul 10 #Python
Python获取邮件地址的方法
Jul 10 #Python
python实现中文分词FMM算法实例
Jul 10 #Python
Python实现的最近最少使用算法
Jul 10 #Python
You might like
php接口与接口引用的深入解析
2013/08/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
Python决策树分类算法学习
2017/12/22 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
利用Python优雅的登录校园网
2020/10/21 Python
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
应届大学生求职的自我评价
2013/11/17 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
意向协议书
2015/01/27 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js