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

         #! 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')
        
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 黄昏 点亮一盏心灯 累了 你为我捶捶背 捏捏肩膀 无言的陪伴 于阳台的一角 斜倚在藤椅上远望着天边如血般的夕阳 煞...
    幸运暖茶阅读 213评论 0 0
  • 他和她,从小一起长大。在他们生活的地方,有一座小山,他们总是喜欢在夜幕降临,寂静无人的时候,一起顺着山道上山。...
    繁华落尽丶空白阅读 331评论 0 0
  • 看了TED演讲:一个人工资有多高,就看这一点。 主要讲了如何让别人认可你的真正价值,并给出让你满意的薪酬? 内容很...
    冯帆阅读 6,446评论 14 136