美文网首页Python知识锦集
(十二)Python 基于第三方库的应用举例

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

作者: IIronMan | 来源:发表于2018-09-01 23:05 被阅读5次

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文件夹中画一个蓝底的图片,图片中有一个红色的圆,效果如下所示:

         #! 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中应该调用默认图片查看器打开)
        

      python 图片处理Pillow模块的使用

    • 2.2、ImageChops 特效与合成

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

      • (1)、正片叠底

        mutiply(im1,im2)
        

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


        6.jpg
        7.jpg
        正片叠底合成效果
        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)
        

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


        8.jpg
        9.jpg
        滤色效果screen.jpg
        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 减去像素的色彩后得到的新的色彩值。举例如下:


        9.jpg
        反相效果图invert.jpg
      • (4)、相减

        subtract(im1,im2)
        

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


        8.jpg
        9.jpg
        相减效果subtract.jpg
        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')
        

相关文章

网友评论

    本文标题:(十二)Python 基于第三方库的应用举例

    本文链接:https://www.haomeiwen.com/subject/fjktpftx.html