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多线程编程(七):使用Condition实现复杂同步
Apr 05 Python
python读写二进制文件的方法
May 09 Python
python实现计算倒数的方法
Jul 11 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python 备份程序代码实现
Mar 06 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
python使用response.read()接收json数据的实例
Dec 19 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
深度学习详解之初试机器学习
Apr 14 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
php win下Socket方式发邮件类
2009/08/21 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
vue v-for直接循环数字实例
2019/11/07 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
python实现简单温度转换的方法
2015/03/13 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
python 调用有道api接口的方法
2019/01/03 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python如何实现线程间通信
2020/07/30 Python
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
农村结婚典礼司仪主持词
2014/03/14 职场文书
2014年公司工作总结
2014/11/22 职场文书
高三复习计划
2015/01/19 职场文书
安装工程师岗位职责
2015/02/13 职场文书
个人工作表现自我评价
2015/03/06 职场文书
优秀大学生自荐信
2015/03/26 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
民事答辩状范本
2015/05/21 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
图文详解matlab原始处理图像几何变换
2021/07/09 Python