在Python交互模式下,虽然可以能立即得到结果,但是不能保存。如果编写一个代码长的程序通常都是在IDE中编写完成一个文件后再运行。但是随着代码越来越多,为了方便代码的维护和健壮性,我们通常按照功能拆分成几个文件。这样也方便在不同的程序中使用同样的一个函数。Python 把各个函数定义存入一个文件,在脚本或解释器的交互式程序中使用,这就是模块。
再将众多具有相关功能的模块文件结构化组合形成包,具有相关功能模块和包的集合就是库。这也是Python的一大特色,因为它具有强大的标准库、第三方库和自定义模块。这些库和模块提供丰富的功能,包括后续学习到的NumPy和Pandas.
模块
我们可以先来自定义一个模块,来看下模块是如何提供功能的。首先编写一个hello.py文件。
代码语言:javascript复制# myList函数,返回一个0-4的列表
def myList():
list = []
for i in range(5):
list.append(i)
return list
然后在编写一个main.py文件,内容如下:
代码语言:javascript复制#导入hello模块
import hello
list = hello.myList()
print(list)
#代码结果:
[0, 1, 2, 3, 4]
在上面的示例中就是说明hello模块提供了一个myList()的功能,我们是在使用的时候,通过import相关的模块名字就可以直接使用这里面编写好的功能,说白了,这也是封装,或者说在Python中有很多提供好的轮子供我们直接使用,可以大大提高开发的效率。
在使用模块的时候,我们使用 import 语句来引入模块。有时候也会遇见这样的写法:from module_name import class_name这个语句表示并不会把module_name(模块名称)中的所有的内容都导入,而是只导入class_name的内容。除此还可以这样写:from module_name import *,表示导入module_name目录下的所有内容。
那么这三种写法有什么区别和不同呢?我们用个实例看下,代码实现json字符串转成字典对象,在将对象转成字符串,用到json库中的模块。
1.import导入
代码语言:javascript复制#导入json
import json
str = """{"firstName": "Bill","lastName": "Gates"}"""
jsonObject = json.loads(str)
print(jsonObject)
jsonStr = json.dumps(jsonObject)
print(jsonStr)
2.from … import … 导入
代码语言:javascript复制from json import loads
from json import dumps
str = """{"firstName": "Bill","lastName": "Gates"}"""
jsonObject = loads(str)
print(jsonObject)
jsonStr = dumps(jsonObject)
print(jsonStr)
3.from … import * 导入
代码语言:javascript复制from json import *
str = """{"firstName": "Bill","lastName": "Gates"}"""
jsonObject = loads(str)
print(jsonObject)
jsonStr = dumps(jsonObject)
print(jsonStr)
上述的代码的结果都是:
代码语言:javascript复制{'firstName': 'Bill', 'lastName': 'Gates'}
{"firstName": "Bill", "lastName": "Gates"}
可以看到,如果使用方法1,那么在代码中使用模块内容的时候,需要加json模块名,如果是使用方法2导入,那么可以直接使用类名调用,不需要加模块名。而方法3是直接是导入模块所有的类,使用时也不需要包含模块名。但是这种写法容易出现类名与文件名重名的问题,而引发类指代不明错误,所以并不推荐使用。
标准库
标准库是Python安装时自带的库,之前提到过,库可以认为是很多模块的集合,当Python安装完成后,就可以直接使用的库。Python 标准库是非常丰富的,组件涉及的范围也很广泛。很多的内置模块都是用C语言编写,我们可以使用这些库来完成系统级别的功能,比如常用的文件 I/O模块。下表是常用的Python标准库和功能介绍。
库名称 | 功能简介 |
---|---|
os | 对目录的新建、删除、权限修改、切换路径,调用执行系统命令 |
sys | 提供对解释器相关的操作 |
json | Python对象与Json对象的转换 |
re | 正则表达式,用于文本和字符串的处理 |
string | 字符串处理库,字符串查找、分割、组合、替换、去重等处理 |
base64 | 将二进制字符串编码和解码为字符串的Base16,Base32和Base64 |
math | 数学函数库 |
decimal | 10进制浮点运算 |
random | 实现各种分布的伪随机数生成器 |
datetime | 对日期和时间的处理 |
zlib、gzip | 压缩和解压缩文件 |
sqlite3、redis | 对sqlite3数据库和redis数据库的操作 |
urllib、urllib2 | 读取特定URL并获得返回的信息,urllib2增加HTTP信息的处理 |
HTMLParser | Python自带的HTML解析模块 |
第三方库
上面介绍了标准库,那么第三方库就更容易理解,不是Python自带的,由其他公司或者组织开发的公开的库(模块),就是第三方库。既然是在Python中使用,也是遵循着Python的语言规范,使用方法跟标准库并没有什么两样。在数据分析中最常用的NumPy和Pandas是第三方库比较有代表性的,使用非常广泛,在下面表中,介绍了一些常用到的第三方库,在后面的学习中会先后的遇到,当时详细介绍功能,这里先做熟悉和了解。
分类 | 库名称 | 功能简介 |
---|---|---|
数据分析及可视化 | numpy | Python科学计算的基础工具包 |
pandas | Python数据分析的库,主要用于数据分析 | |
Matplotlib | 2D绘图库,通常用于数据可视化图表制作 | |
pyecharts | 基于百度Echarts的强大的可视化工具库 | |
Pillow | Python图形库(Python Imaging Library )的分支,作图人员必备库之一 | |
Plotly | 提供的图形库可以进行在线WEB交互,并提供具有出版品质的图形 | |
jieba | 结巴分词是国内流行的Python文本处理工具包,可以实现分词、词典管理、关键字抽取、词性标注等 | |
wordcloud | 词云生成器 | |
机器学习 | Scikit-Learn | Python的机器学习综合库,内置监督式学习和非监督式学习机器学习方法,包括各种主流算法。 |
TensorFlow | 谷歌的第二代机器学习系统,内建深度学习的扩展支持 | |
PyTorch | FaceBook推出的深度学习框架,提供动态计算图 | |
数据库 | pymysql | MySQL连接库 |
pymongo | MongoDB连接库 | |
自动化 | openpyxl | 用于Excel文件读写 |
pyPDF2 | 用于PDF文件读写 | |
python-docx | 用于Word文件读写 | |
Selenium | 模拟人操作浏览器网页,可以实现自动化,测试等 | |
字符解析 | lxml | xml和html读取和解析 |
xpath | xml和html对象解析和格式化处理 | |
BeautifulSoup | xml和html的解析库,常用于爬虫的数据收集 | |
网络爬虫 | requests | 网络请求库,提供多种网络请求方法、支持定义发送信息 |
Crawley | 快速爬取对应网站的内容,数据可以导出为JSON、XML | |
newspaper | 新闻类的文章以及内容分析 | |
Scrapy | 功能强大的爬虫框架 | |
Web框架 | Django | Python生态中最流行的开源Web应用框架,采用模型、模板和视图的编写模式。 |
Flask | 轻量级Web应用框架,几行代码即可建立一个小型网站因为核心简单,实现功能需配合其他三方库使用 |
第三方库可远远不止这些,Python库的范围包括项目构建、文件处理、图像处理、音视频工具、数据库、web框架等方方面面。上面列举的这些仅仅是冰山一角,Python也成为了最受欢迎的语言之一的原因也是功能众多的第三方库,为了程序开发者提供了极大的