Python全案例学习与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.5 常用的外部模块及其应用

5.5.1 常用的外部模块

Python的外部模块包罗万象,而且由于它是开放的,所以不断地被扩充和完善。例如,仅GitHub上就有5000个开源Python项目,它们均可被当作外部模块使用,因此,要列举所有的外部模块,几乎是不可能的事情。此处仅列举开发者经常使用的外部模块。

1.Web框架

(1)Django。它是开源的Web开发框架,遵循MVC设计规范,借助它,可大大缩短Web应用的开发周期,降低开发难度。MVC的全名是Model View Controller,是“模型-视图-控制器”的缩写,是一种软件设计典范。

(2)ActiveGrid。它是企业级的Web 2.0解决方案。

(3)Karrigell。它是简单的Web框架,自身包含了Web服务、.py脚本引擎和纯Python的数据库PyDBLite。

(4)Tornado。它是一个轻量级的Web框架,内置了非阻塞式服务器,而且运行速度相当快。

(5)Webpy。它是一个小巧灵活的Web框架,虽然简单,但是功能强大。

(6)Pylons。它是一个基于Python的高效而可靠的Web开发框架。

(7)Zope。它是一个开源的Web应用服务器。

(8)TurboGears。它是基于Python的MVC风格的Web应用程序框架。

(9)Twisted。它是大型Web框架。

2.科学计算

(1)Matplotlib。它是基于Python实现的类MATLAB的第三方模块,用于绘制一些高质量的数学二维图形。

(2)SciPy。它是基于Python的MATLAB实现,旨在实现MATLAB的所有功能。

(3)NumPy。它是基于Python的第三方模块,用于科学计算,提供了矩阵、线性代数、傅立叶变换等的解决方案。

3.图形界面(GUI)

(1)PyGtk。它是基于Python的GUI程序开发GTK+库。

(2)PyQt。它是用于Python的Qt开发库。

(3)WxPython。它是Python下的GUI编程框架,与MFC的架构相似。

4.其他

(1)BeautifulSoup。它是基于Python的HTML/XML解析器,简单易用。

(2)PIL。它是基于Python的图像处理库,功能强大,对图形文件的格式支持广泛。

(3)PyGame。它是基于Python的多媒体开发和游戏软件开发模块。

(4)Py2exe。它是将Python脚本转换为Windows上可独立运行的可执行程序的工具。

(5)PyInstaller。它是将Python程序转换成独立的可执行文件的工具,由它生成的可执行程序具有跨平台能力。

(6)IPython。IPython是Python的交互式Shell,比默认的Python Shell优越,支持变量自动补全、自动缩进,内置丰富的功能和函数。

(7)Requests。Requests是用Python语言开发的、基于Urllib并采用Apache 2 Licensed开源协议的HTTP库。它比内置的Urllib模块更加简单易用。

(8)PyMySQL。它是一个纯Python的MySQL数据库驱动模块,与MySQL-python兼容。

5.5.2 外部模块的应用举例

举例1:从一个动态GIF文件中提取各帧图像。

GIF文件格式采用一种经过改进的LZW压缩算法,通常称之为“GIF-LZW”算法,它是一种无损的压缩算法,压缩效率较高。GIF格式支持在一个GIF文件内存储多幅彩色图像,并且可以一定的顺序和时间间隔将多幅图像依次读出并显示在屏幕上,以此形成一种简单的动画效果。尽管GIF格式最多支持256种颜色,但是,由于它具有极佳的压缩效率,并且可以实现动画,因而早已被广泛接纳和采用。

为了学习和练习本例,请先从互联网上下载一个动态GIF文件,它应包含若干张静态图片。本例的任务是将动态GIF文件中的各静态帧逐一提取出来,并且以序号的形式保存为若干个图像文件。可用图像编辑软件查看这些文件。

在本例中,主要使用了外部模块PIL(Python Image Library),它是一个具有强大图像处理能力的第三方模块,其中Image是它最重要的类。

在安装好PIL模块后,可通过以下命令查阅它的具体内容和大致的使用方法。

>>> help(PIL)

本例涉及的Image类的主要方法如下。

· Image.open(file):加载名为file的图像文件。

· Image.seek(frameid):跳转并返回图像中的指定帧。

· Image.tell():返回当前帧号。

实现上述要求的完整示例程序如下:

'''
外部模块PIL的应用演示
功能:将一个动态GIF文件中的各帧提取出来并保存
沈红卫
绍兴文理学院 机械与电气工程学院
2018年8月27日
'''

from PIL import Image                        #引用PIL的Image类
myimage=Image.open("e:/demo/timg.gif")          #加载GIF文件
zs=0                                    #帧计数器
if myimage:                               #如果文件被打开
    while True:                            #通过循环统计共有多少帧
      try:
          myimage.seek(zs)                 #到最后一帧会触发异常
          zs += 1
      except:                        #捕捉到异常,表示已到最后一帧,所以结束循环
          break
    print("共有%d帧"%zs)
    for i in range(zs):                                        #将各帧取出来
      myimage.seek(i)
      myimage.save("e:/demo/timg{:02d}.bmp".format(myimage.tell()))   #依次保存
    print("处理结束,各帧已被保存")
else:
    print("无法打开该文件!")

由于程序中已经包含了详细的注释,因此,不再对上述程序进行详细分析和说明。读者可结合注释仔细分析,并结合上机实践领会该程序的设计思想和设计要点。