(十二)Python 基于第三方库的应用举例

简介: (十二)Python 基于第三方库的应用举例

Python 语言功能强大的原因之一是有很多的第三方库。无论是可以与 Matlab 媲美的专业数学计算,还是图像处理,无论是大数据统计、计算机学习,还是生物信息学研究,都可能找到开源的第三方类库,而不必“重复发明轮子”。这些第三方库主要可在 https://pypi.python.org/pypi 等站点找到。


  • 一、对Excel的操作


常见的 Python 第三方库有 xlrdxlwtxluntilspyExceleratoropenpyxlxlswriter等等,它们都可以跨平台对 Excel 进行操作,不需要在系统中安装 Office 办公软件。此外,在Windows操作系统中,Python 还可以利用 win32com 调用系统中已安装的 Office 办公软件对 Excel 进行操作。
其中xlrdxlwtxluntilspyExcelerator 可处理.xls 文件,网上的资源比较多。前两者分别司职 读和写 ,后两者 读/写 均可,但功能偏少。
对于2007版以后的.xlsx 文件,则只有 openpyxlxlswriter 可以处理。其中,xlswriter.xlsx文件的操作功能非常专业,单元格格式设置、合并、数据有效性、图标、公式、宏等操作几乎应有尽有,美中不足的是没有读取功能。而 openpyxl 虽然功能不够强大,但 读/写 均可,能满足基本的操作要求。下面以 openpyxl 为例进行介绍。


  • 1.1、用 openpyxl 在内存中创建工作表
    在互联网状态下,安装 openpyxl 库(不会安装库的联系我或者百度)。首先在内存中创建工作表,或将已有工作表装入内存,例如:


from openpyxl import Workbook
wb = Workbook()
wb.save('/Users/wangchong/Desktop/test.xlsx')   # 在桌面建立test.xlsx的表格
  • 1.2、数据的读取
    使用 openpyxl 可以直接访问活动工作表的单元格,如下:


cell_A4 = ws['A4']
  • 这里,cell_A4对象实例的类型是单元格,其值为cell_A4.value。也可以直接执行、列定位访问单元格,读取数据或赋值,例如:


cell_B4 = ws.cell(row=4,column=2,value='上海市')
  • 注意:这里的行、列参数row和column 都是从1开始的,与Python 其他对象的指针下标不一致。


  • 如果要遍历整个工作表的所有单元格,可以使用 openpyxl.worksheet.Worksheet.rows()方法,将其用tuple()函数转换为元组类型,即可得到每行元组为元素的二维元组。同样,使用openpyxl.worksheet.Worksheet.columns()方法,将其用tuple()函数转换为元组类型,即可得到每列元组为元素的二维元组。
    如果需要读取工作表中的部分数据,则可以使用单元格区间、列区间和行区间,例如:cell_range = ws['A1:C2']、col_range = ws['C:D']和row_range=['5:10']。openpyxl 并没有提供获取有效行数和列数的函数,但可以使用 len() 函数获取。有效行数为 len(tuple(ws.rows)),有效列数为 len(tuple(ws.columns))。


  • 二、图片操作PIL (Python Imaging Library) 是著名的图片处理的第三方,包含基本的图像处理、特效合成、滤镜等方法。其替代库 Pillow 修复了 PIL 的一些缺陷,提供了 Python3的支持。在链接互联网的状态下,安装 Pillow库。Pillow库中除核心模块 Image外,还包含 ImageChops(图片计算)ImageEnhance(图片效果)ImageFilter(滤镜)ImageDraw(绘图) 等主要模块。
  • 2.1、Image 模块及应用Image 模块中常用的函数如下。
  • (1) 图片打开函数


.open(file,openmode)
  • 其中,参数file和openmode 分别为文件名和打开方式(默认为'r',只读)。
  • (2) 新建图片函数


new(mode,size,color=0)
  • 其中,mode为图片色彩模式,取值为:'RGB'、'CMYK'、'LAB'等等。size为图片的大小,是由水平像素数与垂直像素数组成的元组;color为颜色,默认颜色为黑色(0)。
  • (3) 复制图片函数


copy()
  • 功能是将图片的对象复制到内存中。
  • (4) 粘贴图片函数


paste(region.size)
  • 功能是将内存中的图片粘贴到对象region 中,其中,region 为粘贴对象,size为图片大小。
  • (5) 显示图片


show()
  • 功能是显示内存中的图片。
  • (6) 重新设置大小


resize(size)
  • 其中,size为图片的大小,是水平像素与垂直像素元组。
  • (7) 图片旋转


rotate(angle)
  • 其中,angle是旋转的角度。
  • (8) 图片变换


transpose(method)
  • 其中,method可选项有:FLIP_LEFT_RIGHT(左右镜像)、FLIP_TOP_BOTTOM(上下镜像)、ROTATE_90(顺时针 90°)、ROTATE_180(顺时针 180°)、ROTATE_270(逆时针 90°)等。
  • (9) 图片裁剪


copy((x1,y1,x2,y2))
  • 其中,各参数为自左上角点至右下角点的坐标元组。
  • (10) 缩略图


thumbnail(size)
  • 其中,size为缩略图大小。
  • (11) 转换函数


convert(mode)
  • 功能是转换色彩模式。其中,mode可取值为:L、RGB、CMYK等等。
  • (12) 混合图片函数


blend(im1,im2,alpha)
  • 其中,im1,im2 分别相当于 Photoshop 中参加混合的上、下两层图片;alpha 为混合透明度,通过 im1*(1-alpha)+im2*alpha 得到混合结果。
  • (13) 遮罩图片函数


composite(im1,im2,mask)
  • 其中,im1 相当于 Photoshop 中的绑定遮罩层的图片;im2相当于下层图片(被遮罩);mask 为遮罩层图片,要求为黑白二值、灰度或RGBA色彩模式。
  • (14) 保存图片


save(file,format)


  • 功能是将内存中的图片写入文件中。
  • 例如:在桌面/Users/wangchong/Desktop/testImage文件夹中画一个蓝底的图片,图片中有一个红色的圆,效果如下所示:


image.png


#! coding=utf-8
from PIL import Image
from PIL import ImageDraw
path="/Users/wangchong/Desktop/testImage/1.jpg" #文件存储的路径
image=Image.new("RGB",(200,200),"blue")#创建一个蓝色的,大小为200*200像素的RGB图片
drawObject=ImageDraw.Draw(image)
drawObject.ellipse((50,50,80,80),fill="red")#在image上画一个红色的圆
image.save(path)#保存图片
"""以下代码用来显示出画的图片"""
img=Image.open(path)
img.show()#标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)


  • 2.2、ImageChops  特效与合成ImageChops 模块包含一些通过计算图片通道中的像素值而进行特效合成的函数,相当于 Photoshop 中的图层特效。常见的特效函数如下。


  • (1)、正片叠底


mutiply(im1,im2)


  • 这类似于在同一光源叠放两张胶片的投影效果,高亮度视为透明。举例如下:


image.png

image.png


image.png


from PIL import Image
from  PIL import  ImageChops
im1 = Image.open('/Users/wangchong/Desktop/testImage/6.jpg')
im2 = Image.open('/Users/wangchong/Desktop/testImage/7.jpg')
m = ImageChops.multiply(im1,im2)
m.show()
m.save('/Users/wangchong/Desktop/testImage/multiply.jpg')
  • (2)、滤色


screen(im1,im2)
  • 这类似于两张胶片分别透过不同光源在同一屏幕上的投影结果,低亮度视为透明。举例如下:


image.pngimage.png

image.png

from PIL import Image
from  PIL import  ImageChops
im1 = Image.open('/Users/wangchong/Desktop/testImage/8.jpg')
im2 = Image.open('/Users/wangchong/Desktop/testImage/9.jpg')
m = ImageChops.screen(im1,im2)
m.show()
m.save('/Users/wangchong/Desktop/testImage/screen.jpg')
  • (3)、反相


invert(im1)


  • 这类似于照片底片的效果,以 255 减去像素的色彩后得到的新的色彩值。举例如下:


image.png

image.png

(4)、相减

subtract(im1,im2)


其求得的两张图片对应的像素之差,用于采集相同背景图片上的差异前景。举例如下:


image.png

image.png

image.png


from PIL import Image
from  PIL import  ImageChops
im1 = Image.open('/Users/wangchong/Desktop/testImage/8.jpg')
im2 = Image.open('/Users/wangchong/Desktop/testImage/9.jpg')
m = ImageChops.subtract(im1,im2)
m.show()
m.save('/Users/wangchong/Desktop/testImage/subtract.jpg')


目录
相关文章
|
1天前
|
分布式计算 调度 异构计算
Python 数学应用(四)(4)
Python 数学应用(四)
10 4
|
1天前
|
消息中间件 Kafka Python
Python 数学应用(四)(3)
Python 数学应用(四)
20 5
|
1天前
|
存储 传感器 数据可视化
Python 数学应用(四)(2)
Python 数学应用(四)
5 0
Python 数学应用(四)(2)
|
1天前
|
存储 消息中间件 Kafka
Python 数学应用(四)(1)
Python 数学应用(四)
10 2
|
1天前
|
机器学习/深度学习 存储 算法
Python 数学应用(三)(4)
Python 数学应用(三)
7 2
|
1天前
|
存储 算法 决策智能
Python 数学应用(三)(3)
Python 数学应用(三)
9 2
Python 数学应用(三)(3)
|
1天前
|
存储 资源调度 算法
Python 数学应用(三)(2)
Python 数学应用(三)
9 1
|
1天前
|
存储 机器学习/深度学习 前端开发
Python 数学应用(三)(1)
Python 数学应用(三)
11 2
|
1天前
|
数据采集 JavaScript 前端开发
Python 数学应用(二)(4)
Python 数学应用(二)
12 2
|
1天前
|
存储 算法 数据挖掘
Python 数学应用(二)(3)
Python 数学应用(二)
9 2