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 相关文章推荐
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
基于python实现学生管理系统
Oct 17 Python
Python爬虫实战之12306抢票开源
Jan 24 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
Python之变量类型和if判断方式
May 05 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
什么是Python包的循环导入
Sep 08 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 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
Protoss热键控制
2020/03/14 星际争霸
PHP出错界面
2006/10/09 PHP
PHP 已经成熟
2006/12/04 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
javascript cookies操作集合
2010/04/12 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
python实现实时监控文件的方法
2016/08/26 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
python可视化实现KNN算法
2019/10/16 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Pycharm github配置实现过程图解
2020/10/13 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
商务英语专业毕业生自荐信
2013/11/05 职场文书
六年级数学教学反思
2014/02/03 职场文书
企业总经理岗位职责
2014/02/13 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
英语导游词
2015/02/13 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
Pygame Time时间控制的具体使用详解
2021/11/17 Python
浅析python中特殊文件和特殊函数
2022/02/24 Python