Python自动化办公最核心的部分就是处理图像、办公文档 Excel 和 Word。特别是 Excel 的处理,有人说,数据分析的尽头是把数据导入Excel和从Excel导出数据,所以,自动化办公怎么也都绕不开Excel处理,大家可以多留意这一块,在我以前的文章里面,也经常会涉及Excel的处理。
1.图像处理
大家常常听到图像处理,但是这个五颜六色的图像是怎么被计算机精准地进行处理的呢?我们知道,最底层的机器语言是电脑只能处理的电信号,越往上语言越高级,编写却越发容易,但都离不开量化,处理非结构化的内容,其实都是在处理数据。那作为图片,它有哪些“数据”呢?
图片其实是由一个个的像素点组成,每个像素点大家可以理解为一个基本的色块,千千万万个像素点(色块)组成了图片。而每个色块的大小都是固定的,但是却具有颜色属性,这个属性通常会用RGB值来表示,这是光的三原色(红绿蓝),那RGB值具体是什么呢?是由三个数组成的序列。举个例子:以红色为例,RGB值就为(255,0,0),大家只要知道,每种颜色的饱和度在0-255范围内(在MATLAB中大家还会遇到一种是0-1范围内的RGB值)。那我们就知道,图像其实就是一个个可以用RGB值表示的色块,规规矩矩地排列的高维数组。
图像处理常用的是PIL (Python Imaging Library)库,但由于这个库不支持Python3,因此有人又开源了它的一个分支——Pillow,安装的时候用 install pillow,但是在脚本中导入库的时候用 import PIL。如下代码演示了Piloow中的 Image类的主要常见操作。
1.1.图像导入和输出
大家可以理解Image.open()导入图像,创建了数据流(也就是含图像信息的高维数组),后面的操作其实都是在针对这个数据流的操作。
# 导入相应的库
from PIL import Image
# 导入图片
image = Image.open('demo.png')
# 打印图像格式、尺寸大小(像素)、颜色标准
print(image.format, image.size, image.mode)
# 把图片呈现到屏幕
image.show()
图像的输出的一个常用的操作就是输出缩略图,如果我们想控制输出的尺寸,可以用如下的代码(尺寸大于原有尺寸会输出原图,缩略图的长宽比是锁定的):
image = Image.open('demo.png')
size = 100, 100
image.thumbnail(size)
1.2.图像裁剪
这一步最重要的是怎么设置 rect 裁剪参数,网上有很多说明但有的都太抽象了。我通过几组实验,来说明 rect 的四个参数分别是什么,为什么仅用四个参数就能实现裁剪出图像上任意区域任意大小的作用。
rect=a,b,c,d 中,前两个参数是图像与左侧边界、顶端边界的距离,后两个参数是(初步)裁剪的尺寸(宽度、高度)。这里的裁剪是初步裁剪,也就是按照这个尺寸,以左上角的顶点为起始点开始裁剪,初步裁剪出一个图;然后再用 a 和 b 分别让图片的左边界和上边界向右、向下收缩(也就是距离边界的长度)。
举个例子,下面初步裁剪出尺寸为 500*500 的图像:
# 继续用上面例子的image对象
# 设置裁剪比例
rect = 0,0,500,500
# 裁剪图像并打印输出
image.crop(rect).show()
接着向左向下收缩 200 像素:
# 继续用上面例子的image对象
# 设置裁剪比例
rect = 200,200,500,500
# 裁剪图像并打印输出
image.crop(rect).show()
这幅图其实就是前面初始裁剪的收缩版本,既然是收缩,那就有个限制,要满足a<c向右收缩的距离得小于初步截取的宽度;b<d 向下收缩的距离得小于初步截取的高度,否则会报错。
所以注意这个特点,比如说我想裁剪 500*500 的图,就还需要加上这个所截取图像距离原图边界的距离,这样不论想截图像的哪一部分都能够通过这四个参数实现。
1.3.图像旋转翻转
图像旋转翻转也是常见操作,和裁剪、输入输出都属于偏总体的处理动作。
image = Image.open('demo.png')
# 逆时针旋转90度
image.rotate(90).show()
# 左右翻转
image.transpose(Image.FLIP_LEFT_RIGHT).show()
# 上下翻转
image.transpose(Image.FLIP_TOP_BOTTOM).show()
这一内容主要是让大家快速入个门,介绍的都是比较基础粗泛的知识,对于图像像素处理、添加滤镜、修改色差、重叠合并等,以后有机会再介绍。
2.Excel表格处理
我前面很多关于处理Excel数据的文章几乎都是用 pandas 导入并处理表格的,大家可以去看看(如:),就个人而言,我推荐大家使用 pandas 库处理Excel表格数据。但为了介绍的结构的完整,还是再介绍处理Excel表格的另一个也是非常常见的库 openpyxl。
2.1.创建并编辑Excel
如果一开始没有Excel表格,想创建的话,就用 Workbook() 创建一个Excel对象,最后再进行保存。其中,wb.active是在激活工作表,默认返回第一个工作表对象。
from openpyxl import Workbook
wb = Workbook()
# 激活sheet页,默认返回第一页的工作表
ws = wb.active
ws['A1'] = 42
# 另起一行,按顺序添加元素1,2,3
ws.append([1, 2, 3])
ws['A2'] = 3
wb.save("demo1.xlsx")