Python Excel操作
最近公司要把Excel导入到mysql数据库,查了几篇博文,这几项是非常有用的,记录下来。
一、安装xlrd模块
到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。
二、使用介绍
1、导入模块
import xlrd
2、打开Excel文件读取数据
data = xlrd.open_workbook('excelFile.xls')
3、使用技巧
获取一个工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u'Sheet1')#通过名称获取
获取整行和整列的值(数组)
table.row_values(i)
table.col_values(i)
获取行数和列数
nrows = table.nrows
ncols = table.ncols
循环行列表数据
for i in range(nrows ):
print table.row_values(i)
单元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
简单的写入
row = 0
col = 0
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 value = '单元格的值'
xf = 0 # 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0) #单元格的值'
table.cell(0,0).value #单元格的值'
三、Demo代码
Demo比较简单,就是读取Excel数据。
1 # -*- coding: utf-8 -*-
2 import xdrlib ,sys
3 import xlrd
4 def open_excel(file= 'file.xls'):
5 try:
6 data = xlrd.open_workbook(file)
7 return data
8 except Exception,e:
9 print str(e)
10 #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引
11 def excel_table_byindex(file= 'file.xls',colnameindex=0,by_index=0):
12 data = open_excel(file)
13 table = data.sheets()[by_index]
14 nrows = table.nrows #行数
15 ncols = table.ncols #列数
16 colnames = table.row_values(colnameindex) #某一行数据
17 list =[]
18 for rownum in range(1,nrows):
19
20 row = table.row_values(rownum)
21 if row:
22 app = {}
23 for i in range(len(colnames)):
24 app[colnames[i]] = row[i]
25 list.append(app)
26 return list
27
28 #根据名称获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_name:Sheet1名称
29 def excel_table_byname(file= 'file.xls',colnameindex=0,by_name=u'Sheet1'):
30 data = open_excel(file)
31 table = data.sheet_by_name(by_name)
32 nrows = table.nrows #行数
33 colnames = table.row_values(colnameindex) #某一行数据
34 list =[]
35 for rownum in range(1,nrows):
36 row = table.row_values(rownum)
37 if row:
38 app = {}
39 for i in range(len(colnames)):
40 app[colnames[i]] = row[i]
41 list.append(app)
42 return list
43
44 def main():
45 tables = excel_table_byindex()
46 for row in tables:
47 print row
48
49 tables = excel_table_byname()
50 for row in tables:
51 print row
52
53 if __name__=="__main__":
54 main()
然后就是日期的处理,日期类型的cell取出来是个数字,于是查询了下解决的办法。
基本的代码结构
- data = xlrd.open_workbook(EXCEL_PATH)
- table = data.sheet_by_index(0)
- lines = table.nrows
- cols = table.ncols
- print u'The total line is %s, cols is %s'%(lines, cols)
读取某个单元格:
- table.cell(x, y).value
x:行
y:列
行,列都是从0开始
* 时间类型的转换,把excel中时间转成python 时间(两种方式)
excel某个单元格 2014/7/8
- xlrd.xldate_as_tuple(table.cell(2,2).value, 0) #转化为元组形式
- (2014, 7, 8, 0, 0, 0)
- xlrd.xldate.xldate_as_datetime(table.cell(2,2).value, 1) #直接转化为datetime对象
- datetime.datetime(2018, 7, 9, 0, 0)
- table.cell(2,2).value #没有转化
- 41828.0
源码查看:
- # @param xldate The Excel number
- # @param datemode 0: 1900-based, 1: 1904-based.
- xldate_as_tuple(xldate, datemode)
输入一个日期类型的单元格会返回一个时间结构组成的元组,可以根据这个元组组成时间类型
datemode 有2个选项基本我们都会使用1900为基础的时间戳
- ##
- # Convert an Excel date/time number into a datetime.datetime object.
- #
- # @param xldate The Excel number
- # @param datemode 0: 1900-based, 1: 1904-based.
- #
- # @return a datetime.datetime() object.
- #
- def xldate_as_datetime(xldate, datemode)
输入参数和上面的相同,但是返回值是一个datetime类型,就不需要在自己转换了
最后还有一个就是写入excel,相对比较简单
[python] view plaincopy
- from pyExcelerator import *
- w = Workbook() #创建一个工作簿
- ws = w.add_sheet('Hey, Hades') #创建一个工作表
- ws.write(0,0,'bit') #在1行1列写入bit
- ws.write(0,1,'huang') #在1行2列写入huang
- ws.write(1,0,'xuan') #在2行1列写入xuan
- w.save('mini.xls') #保存
注意,中文需要转码
txt="中文"
ws.write(1,1,txt.decode("gbk"))
贴上我写的导出excel 函数:
[python] view plaincop
- #-*-coding:utf8 -*-
- #import xlrd
- from pyExcelerator import *
- def table_to_excel(user_list, file_name="result.xls"):
- '''''This function can output the user_list to the excel files'''
- work_book = Workbook()
- work_sheet = work_book.add_sheet("solution")
- key_col_map = {}
- for col, key in enumerate(user_list[0]):
- work_sheet.write(0, col, key)
- key_col_map[key] = col
- for cursor, user in enumerate(user_list):
- for key, value in user.items():
- work_sheet.write(cursor + 1, key_col_map[key], str(value).decode("utf-8"))
- work_book.save(file_name)
- if __name__ == "__main__":
- '''''For test the function'''
- test_list = []
- item1 = {}
- item1["test"] = "good"
- item1["number"] = 10
- item2 = {"test": "bad",
- "number": 9
- }
- test_list.append(item1)
- test_list.append(item2)
- table_to_excel(test_list)
- Python 异常处理完整指南
- 有趣的安全实验:利用多线程资源竞争技术上传shell
- NotSerializableException解决方法NotSerializableException
- 谁蹭了我的WiFi?浅谈家用无线路由器攻防
- 当输入流和输出流同时作用一个文件
- 揭秘:充电宝是如何盗取你的个人隐私的?
- 微软:暴力破解面前,增强密码复杂性基本没用
- 创建被图像填充的组件解释几处做法解释几点
- Android原生嵌入React Native
- React Native控件之Listview
- React Native控件只TextInput
- Qzone React Native改造
- android 特卖列表倒计时卡顿问题
- ios zxing扫码问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法