前言
在很多应用场景中,程序都需要读取excel的配置。
比如,在游戏中,数值策划用excel 建好了数值表,我们要导入到游戏中。
概述
这里我使用了 pyexcel-xls 这个东西。我个人觉得这个东西导出的数据结构,结构可读性很强,数据结构如下:
整个excel文件,转化为一个字典结构:每个key就是一个子表(Sheet)
每个子表(Sheet),转化为一个二维数组:分别为行和列。
注意,本文对应的版本更新为 pyexcel-xls 0.2.3。
安装
pypi 的地址:
https://pypi.Python.org/pypi/pyexcel-xls/
■ 方法一:
可以直接用pip安装
pip install pyexcel-xls
■ 方法二:
下载安装包手动安装。
先安装两个依赖包:
xlrd 和 pyexcel-io
然后再安装 pyexcel-xls
使用
一、读excel数据 (xls, xlsx)
1,先建立一个目标excel表,这里为了做演示,简单建立一个 read_test.xlsx 文件:
里面的数据(3行,4列):
2,写python 脚本,读这个文件:
- #! /usr/bin/env python
- #coding=utf-8
- # pyexcel_xls 以 OrderedDict 结构处理数据
- from collections import OrderedDict
- from pyexcel_xls import get_data
- from pyexcel_xls import save_data
- def read_xls_file():
- xls_data = get_data(r"D:\read_test.xlsx")
- print "Get data type:", type(xls_data)
- for sheet_n in xls_data.keys():
- print sheet_n, ":", xls_data[sheet_n]
- if __name__ == '__main__':
- read_xls_file()
看一下输出的打印信息:
可以看到:
整个excel文件,转化为一个OrderedDict (有序字典)结构:每个key就是一个子表(Sheet)。
每个子表(Sheet),转化为一个列表结构:很像二维数组,第一层列表为行(Row),行的下标为列(Column),对应的值为单元格的值。编码为 unicode
简单,易用,读出数据后,非常适合做二次处理!
■ 注意,excel文件名(就是那个xls或者xlsx文件),尽量不要用中文,如果您要使用中文,请转化为unicode编码,如:
xls_data = get_data(unicode(r"D:\试试.xlsx", "utf-8"))
二、写excel数据 (xls)
根据上文,写也比较简单,不做过多解释。
- #! /usr/bin/env python
- #coding=utf-8
- # pyexcel_xls 以 OrderedDict 结构处理数据
- from collections import OrderedDict
- from pyexcel_xls import get_data
- from pyexcel_xls import save_data
- def read_xls_file():
- xls_data = get_data(unicode(r"D:\试试.xlsx", "utf-8"))
- print "Get data type:", type(xls_data)
- for sheet_n in xls_data.keys():
- print sheet_n, ":", xls_data[sheet_n]
- return xls_data
- # 写Excel数据, xls格式
- def save_xls_file():
- data = OrderedDict()
- # sheet表的数据
- sheet_1 = []
- row_1_data = [u"ID", u"昵称", u"等级"] # 每一行的数据
- row_2_data = [4, 5, 6]
- # 逐条添加数据
- sheet_1.append(row_1_data)
- sheet_1.append(row_2_data)
- # 添加sheet表
- data.update({u"这是XX表": sheet_1})
- # 保存成xls文件
- save_data("D:\write_test.xls", data)
- if __name__ == '__main__':
- save_xls_file()
看一下写出的xls文件: