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获得时间的实例说明
Mar 25 Python
Python运算符重载详解及实例代码
Mar 07 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
python3.5 email实现发送邮件功能
May 22 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
如何用Python 加密文件
Sep 10 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
玩转虚拟域名◎+ .
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
python实现简单socket通信的方法
2016/04/19 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
村长反四风问题个人对照检查材料
2014/09/21 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
PHP策略模式写法
2021/04/01 PHP
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL