先看这个打广告的。。
https://blog.csdn.net/broadview2006/article/details/68924052
引言:Python的强大体现在“模块自信”上,因为Python不仅有很强大的自有模块(标准库),还有海量的第三方模块(或者包、库),并且很多开发者还在不断贡献在自己开发的新模块(或者包、库)。本文将向大家概述介绍Python的自有模块——标准库。
本文选自《跟老齐学Python:轻松入门》。
“Python自带‘电池’”,这种说法流传已久。
在Python被安装的时候,就有不少模块也随着安装到本地的计算机上了。这些东西就如同“电力”一样,让Python拥有了无限生机,能够轻而易举地免费使用很多模块。所以,称其为“自带电池”。
那些在安装Python时就默认已经安装好的模块被统称为“标准库”。
熟悉标准库是学习编程必须要做的事。
所有模块都服从下述引用方式,以下是最基本的,也是最常用的,还是可读性非常好的引用方式。
import modulename
例如:
>>> import pprint
>>> a = {"lang":"python", "book":"www.itdiffer.com", "teacher":"qiwsir", "goal":"from beginner to master"}
>> pprint.pprint(a)
{'book': 'www.itdiffer.com',
'goal': 'from beginner to master',
'lang': 'python',
'teacher': 'qiwsir'}
在对模块进行说明的过程中,以标准库pprint为例。
以pprint.pprint()的方式使用模块中的一种方法,这种方法能够让字典格式化输出。看看结果是不是比原来更容易阅读了呢?
在import后面,理论上可以跟好多模块名称。但是在实践中,还是建议大家一次一个名称,太多了不容易阅读。
这是用import pprint样式引入模块,并以点号“.”(英文半角)的形式引用其方法。
关于引入模块的方式,前文介绍import语句时已经讲过,这里再次罗列,权当复习。
>>> from pprint import pprint
意思是从pprint模块中只将pprint()引入,之后就可以直接使用它了。
>>> pprint(a)
{'book': 'www.itdiffer.com',
'goal': 'from beginner to master',
'lang': 'python',
'teacher': 'qiwsir'}
再懒一些还可以这样操作:
>>> from pprint import *
这就将pprint模块中的一切都引入了,于是可以像上面那样直接使用模块中的所有可用的内容。
诚然,如果很明确使用模块中的哪些方法或属性,那么使用类似from modulename import name1, name2, name3…也未尝不可。需要再次提醒读者注意的是,不能因为引入了模块而降低了可读性,让别人不知道呈现在眼前的方法是从何而来的。
有时候引入的模块或者方法名称有点长,这时可以给它重命名。如:
>>> import pprint as pr
>>> pr.pprint(a)
{'book': 'www.itdiffer.com',
'goal': 'from beginner to master',
'lang': 'python',
'teacher': 'qiwsir'}
当然,还可以这样操作:
>>> from pprint import pprint as pt
>>> pt(a)
{'book': 'www.itdiffer.com',
'goal': 'from beginner to master',
'lang': 'python',
'teacher': 'qiwsir'}
但是不管怎样,一定要让别人看得懂,且要过了若干时间,自己也还能看得懂。
继续以pprint为例,深入研究:
>>> import pprint
>>> dir(pprint)
['PrettyPrinter', '_StringIO', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_commajoin', '_id', '_len', '_perfcheck', '_recursion', '_safe_repr', '_sorted', '_sys', '_type', 'isreadable', 'isrecursive', 'pformat', 'pprint', 'saferepr', 'warnings']
对dir()并不陌生,从结果中可以看到pprint的属性和方法。其中有的是以双画线、单画线开头的,为了不影响我们的视觉,先把它们去掉。
>>> [ m for m in dir(pprint) if not m.startswith('_') ]
['PrettyPrinter', 'isreadable', 'isrecursive', 'pformat', 'pprint', 'saferepr', 'warnings']
针对这几个,为了能够搞清楚它们的含义,可以使用help(),比如:
>>> help(isreadable)
Traceback (most recent call last):
File "", line 1, in
NameError: name 'isreadable' is not defined
这样做是错误的。大家知道错在何处吗?
>>> help(pprint.isreadable)
前面是用import pprint方式引入模块的。
Help on function isreadable in module pprint:
isreadable(object)
Determine if saferepr(object) is readable by eval().
通过帮助信息,能够查看到该方法的详细说明。可以用这种方法一个一个地查看,反正也不多,对每个方法都要熟悉。
需要注意的是,pprint.PrettyPrinter是一个类,后面的是方法。
再回头看看dir(pprint)的结果:
>>> pprint.__all__
['pprint', 'pformat', 'isreadable', 'isrecursive', 'saferepr', 'PrettyPrinter']
这个结果是不是很眼熟?除了"warnings"之外,跟前面通过列表解析式得到的结果一样。
其实,当我们使用from pprint import *的时候,就是将__all__里面的方法引入。
你能记住每个模块的属性和方法吗?比如前面刚刚查询过的pprint模块中的属性和方法,现在能背诵出来吗?相信大部分人是记不住的。所以,我们需要使用dir()和help()。
>>> print(pprint.__doc__)
Support to pretty-print lists, tuples, & dictionaries recursively.
Very simple, but useful, especially in debugging data structures.
Classes
-------
PrettyPrinter()
Handle pretty-printing operations onto a stream using a configured
set of formatting parameters.
Functions
---------
pformat()
Format a Python object into a pretty-printed representation.
pprint()
Pretty-print a Python object to a stream [default is sys.stdout].
saferepr()
Generate a 'standard' repr()-like value, but protect against recursive
data structures.
pprint.__doc__是查看整个类的文档,还知道整个文档是写在什么地方的吗?
还是使用pm.py文件,增加如下内容:
#!/usr/bin/env python
# coding=utf-8
""" #增加的
This is a document of the python module. #增加的
""" #增加的
def lang():
... #省略了,后面的也省略了
在这个文件的开始部分,所有类、方法和import之前,写一个用三个引号包裹着的字符串,这就是文档。
>>> import sys
>>> sys.path.append("~/Documents/VBS/StarterLearningPython/2code")
>>> import pm
>>> print(pm.__doc__)
This is a document of the python module.
这就是撰写模块文档的方法,即在.py文件的最开始写相应的内容。这个要求应该成为开发者的习惯。
对于Python的标准库和第三方模块,不仅可以查看帮助信息和文档,而且还能够查看源码,因为它是开放的。
还是回到dir(pprint)中找一找,有一个__file__属性,它会告诉我们这个模块的位置:
>>> print(pprint.__file__)
/usr/lib/python3.4/pprint.py
接下来就可以查看这个文件的源码:
$ more /usr/lib/python3.4/pprint.py
# Author: Fred L. Drake, Jr.
……
"""Support to pretty-print lists, tuples, & dictionaries recursively.
Very simple, but useful, especially in debugging data structures.
Classes
-------
PrettyPrinter()
Handle pretty-printing operations onto a stream using a configured
set of formatting parameters.
Functions
---------
pformat()
Format a Python object into a pretty-printed representation
.....
"""
这里只查抄了文档中的部分信息,是不是跟前面通过__doc__查看的结果一样呢?
请读者在闲暇时间阅读源码。事实证明,这种标准库中的源码是质量最好的。阅读高质量的代码是提高编程水平的途径之一。
本文选自《跟老齐学Python:轻松入门》,点此链接可在博文视点官网查看此书。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
https://blog.csdn.net/ooxxshaso/article/details/79803102
time模块
时间戳time.time()#打印出的是秒数,从1970年开始算
time.localtime()#显示的是结构化时间,当地时间
time.gmtime()#显示的也是结构化时间,不过是世界标准时间
将结构化时间转换成时间戳,time.mktime(time.localtime())
将结构化时间转换成字符串时间,time.strftime("%Y-%m-%d %X",time.localtime())
将字符串时间转换为结构化时间,time.strptime(“2018:04:03:15:00:00”,"%Y:%m:%d:%X")
直观的显示时间:time.asctime();time.ctime()
还有datetime模块中的datetime中的now方法也能够显示现在的时间
>>> import time
>>> time.time()
1522738511.5656116
>>> t = time.localtime()#显示结构化时间,可以取出
>>> t
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=3, tm_hour=14, tm_min=55, tm_sec=58, tm_wday=1, tm_yday=93, tm_isdst=0)
>>> t.tm_year
2018
>>> t.tm_yday
93
>>> t1 = time.gmtime()
>>> t1
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=3, tm_hour=7, tm_min=1, tm_sec=3, tm_wday=1, tm_yday=93, tm_isdst=0)
>>> #将结构化时间转换成时间戳
>>> t2 = time.mktime(time.localtime())
>>> t2
1522740660.0
>>> t3 = time.strftime("%Y-%m-%d %X",time.localtime())
>>> t3
'2018-04-03 15:35:24'
>>> t4 = time.strptime("2018:04:03:15:00:00","%Y:%m:%d:%X")
>>> t4
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=3, tm_hour=15, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=93, tm_isdst=-1)
>>> t5 = time.asctime()
>>> t5
'Tue Apr 3 15:43:20 2018'
>>> t6 = time.ctime()
>>> t6
'Tue Apr 3 15:43:35 2018'
>>> import datetime
>>> t7 = datetime.datetime.now()
>>> t7
datetime.datetime(2018, 4, 3, 15, 45, 39, 99611)
>>>
random模块
os模块
sys模块
json模块
re模块
ret = re.findall('xiaom','xaiosmmkxiaomdshaid')
print(ret)
#元字符:^ $ * + ? {} [] \ ( ) \
re模块下的方法:
re.findall()方法返回的是一个列表,切记
re.search()方法返回的是一个对象,需要用group()方法来取出其中的值
re.match()方法和search方法类似,只是从第一个字符开始匹配,返回的也是一个对象,需要用group()方法取出
re.split()方法,分割字符串,可以用字符集[]来多次分割,返回的是一个列表
re.sub()替换方法,可以用四个参数,第一个参数为匹配的规则(需要替换的内容),第二个参数为替换成的内容,第三个参数为需要替换的字符串,第四个参数为可选参数,默认为全部替换
re.compile() 设立一个匹配的规则,可以调用其他的匹配方法,完成多次匹配
re.finditer(),与findall的功能一样,不同的是finditer返回的是迭代器对象,next取出后再用group取出具体值
用?:来取消查找的优先级
import re
print(re.findall('a','ahsk sdahoi'))#['a', 'a']会返回所有满足条件的结果,放在列表中
print(re.search('hello','dsahello sdhashelloca').group())#hello 只返回第一个找到的值并且以对象的方式来存储,需要调用group方法来取出其中的数值,可以用?P<>来给要查找的内容命名
print(re.match('a','abc'))#<_sre.SRE_Match object; span=(0, 1), match='a'> 和search类似,不同的是字符串只是在开始的位置进行匹配,需要group()方法取出
print(re.split('[ab]','abcd'))#['', '', 'cd'] 先按'a'分割得到''和bcd,再将''和''bcd'按b进行分割,返回的是一个列表
print(re.sub('\d','hello','dsadfa1afas3fd3',1))#字符串替换,sub里面有四个参数,匹配规则,替换的内容,需要处理的字符串,替换的个数,没有写数字时默认全部都替换
com = re.compile('\d+')#规则,可以多次使用,规则已经确定了,拿需要匹配的字符串来匹配这个规则
com.findall('dasdasd81d9e9')
ret = re.finditer('\d','dasd1w378das87')#与findall一样,不过返回的是迭代器对象(next方法取值),用group()方法来取出
print(next(ret).group())
ret1 = re.findall('www\.(baidu|163)\.com','www.baidu.com')
print(ret1)#['baidu']
ret2 = re.findall('www\.(?:baidu|163)\.com','www.baidu.com')
print(ret2)#['www.baidu.com']
和json模块的功能类似,用来做数据交换,xml通过<>节点来区别数据结构
logging模块
string:通用字符串操作
re:正则表达式操作
difflib:差异计算工具
textwrap:文本填充
unicodedata:Unicode字符数据库
stringprep:互联网字符串准备工具
readline:GNU按行读取接口
rlcompleter:GNU按行读取的实现函数
struct:将字节解析为打包的二进制数据
codecs:注册表与基类的编解码器
datetime:基于日期与时间工具
calendar:通用月份函数
collections:容器数据类型
collections.abc:容器虚基类
heapq:堆队列算法
bisect:数组二分算法
array:高效数值数组
weakref:弱引用
types:内置类型的动态创建与命名
copy:浅拷贝与深拷贝
pprint:格式化输出
reprlib:交替repr()的实现
numbers:数值的虚基类
math:数学函数
cmath:复数的数学函数
decimal:定点数与浮点数计算
fractions:有理数
random:生成伪随机数
itertools:为高效循环生成迭代器
functools:可调用对象上的高阶函数与操作
operator:针对函数的标准操作
os.path:通用路径名控制
fileinput:从多输入流中遍历行
stat:解释stat()的结果
filecmp:文件与目录的比较函数
tempfile:生成临时文件与目录
glob:Unix风格路径名格式的扩展
fnmatch:Unix风格路径名格式的比对
linecache:文本行的随机存储
shutil:高级文件操作
macpath:Mac OS 9路径控制函数
pickle:Python对象序列化
copyreg:注册机对pickle的支持函数
shelve:Python对象持久化
marshal:内部Python对象序列化
dbm:Unix“数据库”接口
sqlite3:针对SQLite数据库的API 2.0
zlib:兼容gzip的压缩
gzip:对gzip文件的支持
bz2:对bzip2压缩的支持
lzma:使用LZMA算法的压缩
zipfile:操作ZIP存档
tarfile:读写tar存档文件
csv:读写CSV文件
configparser:配置文件解析器
netrc:netrc文件处理器
xdrlib:XDR数据编码与解码
plistlib:生成和解析Mac OS X .plist文件
hashlib:安全散列与消息摘要
hmac:针对消息认证的键散列
os:多方面的操作系统接口
io:流核心工具
time:时间的查询与转化
argparser:命令行选项、参数和子命令的解析器
optparser:命令行选项解析器
getopt:C风格的命令行选项解析器
logging:Python日志工具
logging.config:日志配置
logging.handlers:日志处理器
getpass:简易密码输入
curses:字符显示的终端处理
curses.textpad:curses程序的文本输入域
curses.ascii:ASCII字符集工具
curses.panel:curses的控件栈扩展
platform:访问底层平台认证数据
errno:标准错误记号
ctypes:Python外部函数库
threading:基于线程的并行
multiprocessing:基于进程的并行
concurrent:并发包
concurrent.futures:启动并行任务
subprocess:子进程管理
sched:事件调度
queue:同步队列
select:等待I/O完成
dummy_threading:threading模块的替代(当_thread不可用时)
_thread:底层的线程API(threading基于其上)
_dummy_thread:_thread模块的替代(当_thread不可用时)
socket:底层网络接口
ssl:socket对象的TLS/SSL填充器
asyncore:异步套接字处理器
asynchat:异步套接字命令/响应处理器
signal:异步事务信号处理器
mmap:内存映射文件支持
email:邮件与MIME处理包
json:JSON编码与解码
mailcap:mailcap文件处理
mailbox:多种格式控制邮箱
mimetypes:文件名与MIME类型映射
base64:RFC 3548:Base16、Base32、Base64编码
binhex:binhex4文件编码与解码
binascii:二进制码与ASCII码间的转化
quopri:MIME quoted-printable数据的编码与解码
uu:uuencode文件的编码与解码
html:HTML支持
html.parser:简单HTML与XHTML解析器
html.entities:HTML通用实体的定义
xml:XML处理模块
xml.etree.ElementTree:树形XML元素API
xml.dom:XML DOM API
xml.dom.minidom:XML DOM最小生成树
xml.dom.pulldom:构建部分DOM树的支持
xml.sax:SAX2解析的支持
xml.sax.handler:SAX处理器基类
xml.sax.saxutils:SAX工具
xml.sax.xmlreader:SAX解析器接口
xml.parsers.expat:运用Expat快速解析XML
webbrowser:简易Web浏览器控制器
cgi:CGI支持
cgitb:CGI脚本反向追踪管理器
wsgiref:WSGI工具与引用实现
urllib:URL处理模块
urllib.request:打开URL连接的扩展库
urllib.response:urllib模块的响应类
urllib.parse:将URL解析成组件
urllib.error:urllib.request引发的异常类
urllib.robotparser:robots.txt的解析器
http:HTTP模块
http.client:HTTP协议客户端
ftplib:FTP协议客户端
poplib:POP协议客户端
imaplib:IMAP4协议客户端
nntplib:NNTP协议客户端
smtplib:SMTP协议客户端
smtpd:SMTP服务器
telnetlib:Telnet客户端
uuid:RFC4122的UUID对象
socketserver:网络服务器框架
http.server:HTTP服务器
http.cookies:HTTPCookie状态管理器
http.cookiejar:HTTP客户端的Cookie处理
xmlrpc:XML-RPC服务器和客户端模块
xmlrpc.client:XML-RPC客户端访问
xmlrpc.server:XML-RPC服务器基础
ipaddress:IPv4/IPv6控制库
audioop:处理原始音频数据
aifc:读写AIFF和AIFC文件
sunau:读写Sun AU文件
wave:读写WAV文件
chunk:读取IFF大文件
colorsys:颜色系统间转化
imghdr:指定图像类型
sndhdr:指定声音文件类型
ossaudiodev:访问兼容OSS的音频设备
gettext:多语言的国际化服务
locale:国际化服务
turtle:Turtle图形库
cmd:基于行的命令解释器支持
shlex:简单词典分析
tkinter:Tcl/Tk接口
tkinter.ttk:Tk主题控件
tkinter.tix:Tk扩展控件
tkinter.scrolledtext:滚轴文本控件
pydoc:文档生成器和在线帮助系统
doctest:交互式Python示例
unittest:单元测试框架
unittest.mock:模拟对象库
test:Python回归测试包
test.support:Python测试工具套件
venv:虚拟环境搭建
bdb:调试框架
faulthandler:Python反向追踪库
pdb:Python调试器
timeit:小段代码执行时间测算
trace:Python执行状态追踪
sys:系统相关的参数与函数
sysconfig:访问Python配置信息
builtins:内置对象
main:顶层脚本环境
warnings:警告控制
contextlib:with状态的上下文工具
abc:虚基类
atexit:出口处理器
traceback:打印或读取一条栈的反向追踪
future:未来状态定义
gc:垃圾回收接口
inspect:检查存活的对象
site:址相关的配置钩子(hook)
fpectl:浮点数异常控制
distutils:生成和安装Python模块
code:基类解释器
codeop:编译Python代码
imp:访问import模块的内部
zipimport:从ZIP归档中导入模块
pkgutil:包扩展工具
modulefinder:通过脚本查找模块
runpy:定位并执行Python模块
importlib:import的一种实施
parser:访问Python解析树
ast:抽象句法树
symtable:访问编译器符号表
symbol:Python解析树中的常量
token:Python解析树中的常量
keyword:Python关键字测试
tokenize:Python源文件分词
tabnany:模糊缩进检测
pyclbr:Python类浏览支持
py_compile:编译Python源文件
compileall:按字节编译Python库
dis:Python字节码的反汇编器
pickletools:序列化开发工具
msilib:读写Windows Installer文件
msvcrt:MS VC++ Runtime的有用程序
winreg:Windows注册表访问
winsound:Windows声音播放接口
posix:最常用的POSIX调用
pwd:密码数据库
spwd:影子密码数据库
grp:组数据库
crypt:Unix密码验证
termios:POSIX风格的tty控制
tty:终端控制函数
pty:伪终端工具
fcntl:系统调用fcntl()和ioctl()
pipes:shell管道接口
resource:资源可用信息
nis:Sun的NIS的接口
syslog:Unix syslog程序库
本文转自:https://www.toutiao.com/a6611104093169517070/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1543192963&app=news_article&utm_source=weixin&iid=51711240216&utm_medium=toutiao_android&group_id=6611104093169517070