Python 常见 excel 文件的操作模块
为更加深入的理解Python及理解艺赛旗机器人的操作原理,这里简单介绍基于python开发的对于日常文件的操作的模块
1. Excel文档的读写操作
1.1 Excel 文件表格数据的读取
RPA 机器人的设计器的流程设计过程该功能的实现
在很多应用场景中,程序都需要读取excel的配置。
比如,在游戏中,数值策划用 excel 建好了数值表,我们要导入到游戏中。
概述
这里我使用了 pyexcel-xls 这个东西。我个人觉得这个东西导出的数据结构,结构可读性很强,数据结构如下:
整个 excel 文件,转化为一个字典结构:每个 key 就是一个子表(Sheet)
每个子表(Sheet),转化为一个二维数组:分别为行和列。
安装
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 文件:
1.2 Excel 文件表格数据的写入
python 中模块有 xlxswriter 模块
具体的使用过程:
1、安装 xlsxwriter 模块pip install xlsxwriter
2、使用import
xlsxwriter
`workbook ``=` `xlsxwriter.Workbook(``'hello.xlsx'``)`
`worksheet ``=` `workbook.add_worksheet()`
`worksheet.set_column(``'B:B'``, ``len``(``'hello world'``)``+``1``)`
`worksheet.write(``'B5'``, ``'hello world'``)`
`# 或者:worksheet.write('A1', 'hello world')`
`workbook.close()`
按行写入:from
xlsxwriter.workbook ``import
Workbook
`workbook ``=` `Workbook(``'hello.xlsx'``)`
`worksheet ``=` `workbook.add_worksheet()`
`bold ``=` `workbook.add_format({``'bold'``: ``1``})`
`# Add the worksheet data that the charts will refer to.`
`headings ``=` `[``'Types'``, ``'Sub Type'``, ``'Value 1'``, ``'Value 2'``, ``'Value 3'``]`
`data ``=` `[`
`[``'Type 1'``, ``'Sub Type A'``, ``5000``, ``8000``, ``6000``],`
`['``', '``Sub ``Type` `B', ``2000``, ``3000``, ``4000``],`
`['``', '``Sub ``Type` `C', ``250``, ``1000``, ``2000``],`
`[``'Type 2'``, ``'Sub Type D'``, ``6000``, ``6000``, ``6500``],`
`['``', '``Sub ``Type` `E', ``500``, ``300``, ``200``],`
`]`
`worksheet.write_row(``'A1'``, headings, bold)`
`for` `row_num, row_data ``in` `enumerate``(data):`
`worksheet.write_row(row_num ``+` `1``, ``0``, row_data)`
`workbook.close()`
3、方法介绍:
(1) 创建你的.xlsx 文件 : workbook = xlsxwriter.Workbook(‘你的 xlsx 文件名.xlsx’)
(2) 增加 sheet : worksheet = workbook.add_worksheet()
(3) 设置 column 的属性,set_column(),第一个参数是确定设置第几列到第几列属性,’A:A’是设置 A 列的属性,’A:D’是设置 A 列到 D 列的属性,第二个参数是设置列宽,通过这个参数可以确定指定的列的宽度
(4) 一切都准备好了,现在就写入内容了。两种方式:
第一种,三个参数的,第一个参数是确定开始的行的位置,第二个参数是确定开始的列的位置,第三个参数是要写入的内容
第二种,两个参数的,第一个参数是确定开始的列行 (A1 这样的,第 A 列第 1 行),第二个参数是写入的内容
具体的请于.xlsx 文件对应:
(5) 最后别忘了,把写入后的.xlsx 文件关闭, workbook.close()
在艺赛旗的设计器中使用的是类似该模块的方法
其中读取 Excel 表格数据使用的是 pandas 的 excel_read 模块进行操作的,不需要先打开文件进行数据的操作,而是直接 hou8tai 打开进行数据的读取操作
而写入数据的原理则类似以上 Python 的 xlxswriter 模块的方法进行操作的 Excel 表格对应设计器中的流程的 Excel 的整行,整列,单元格,等的操作
以上为个人暂定见解,尚有许多其他 Python 的模块也能进行相应功能的实现(xlsread 模块)
推荐 xlrd 和 xlwings,公司 rpa 包自带