标准库-简介
Python 标准库是 Python 编程语言的核心组成部分,提供了丰富的模块和工具,涵盖了文件操作、网络编程、数据处理、系统管理、并发编程等多个领域。标准库的优势在于它是 Python 自带的,无需额外安装,且经过广泛测试和优化,具有高度的可靠性和性能。
标准库-帮助文档查找
dir(包名):查看该包下的对应的函数信息
help(包名):查看该包中的分装的函数信息
包名.path:可以获取到指定包对应的文件路径
标准库-常用
1、内置函数和数据类型
builtins:包含 Python 的内置函数(如 print()、len()、range() 等)和内置类型(如 int、str、list、dict 等)。
collections:提供了额外的数据结构,如 defaultdict、Counter、deque、namedtuple 等。
itertools:提供了高效的迭代器工具,用于组合、排列、分组等操作。
functools:提供了高阶函数工具,如 reduce、lru_cache、partial 等。
概念:
functools 是python2.5被引人的,一些工具函数放在此包里。
操作:
import functools :引用对应的包
dir(functools) :查看包中对应的工具函数
1、partial函数(偏函数):
1-1、概念:
把一个函数的某些参数设置默认值,返回一个新的函数,调用这个新函数会更简单。
1-2、示例:
import functools
def showarg(*args, **kw):
print(args)
print(kw)
p1=functools.partial(showarg, 1,2,3)
p1()
p1(4,5,6)
p1(a='python', b='itcast')
p2=functools.partial(showarg, a=3,b='linux')
p2()
p2(1,2)
p2(a='python', b='itcast')
2、wraps函数:
2-1、概念:
使用装饰器时,有一些细节需要被注意。例如,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)。Python的tools 提供了一个叫wraps的装饰器来消除这样的副作用
2-2、示例:
import functools
def note(func):
"note function"
@functools.wraps(func)
def wrapper():
"wrapper function"
print('note something')
return func()
return wrapper
@note
def test():
"test function"
print('I am test')
test()
print(test.__doc__)
2、文件与目录操作
os:提供了与操作系统交互的功能,如文件操作、目录管理、环境变量等。
sys:提供了与 Python 解释器交互的功能,如命令行参数、模块路径、退出程序等。
shutil:提供了高级文件操作功能,如复制、移动、删除文件或目录。
pathlib:提供了面向对象的路径操作工具(Python 3.4+)。
glob:用于查找符合特定模式的文件路径。
2-1、文件与目录操作-os(操作系统接口)
import os引用系统的包
os.name():判断现在正在使用的平台,widows返回'nt';Linux返回'posix'。
os.getcwd():得到当前工作的目录。
os.listdir():指定所有目录下所有的文件和目录名。
os.remove():删除指定文件。
os.rmdir():删除指定目录。
os.mkdir():创建目录,只能建立一层。
os.makedirs():递归创建目录。
os.path.isfile():判断制定对象是否为文件。是返回True,否则False。
os.path.isdir():判断指定对象是否为目录。是True,否则False。
os.path.exists():检验指定的对象是否存在。是True,否则False。
os.path.split():返回路径的目录和文件名。
os.path.realpath(path) #返回path的真实路径
os.path.relpath(path[, start]) #从start开始计算相对路径
os.getcwd():获得当前工作的目录。
os.system():执行shell命令。
os.chdir():改变目录到指定目录。
os.path.getsize():获得文件的大小,如果为目录,返回0。
os.path.abspath():获得绝对路径。
os.path.join(path,name):连接目录和文件名。
os.path.basename(path):返回文件名。
os.path.dirname(path):返回文件路径。
# fork进程的使用
pid=os.fork():程序执行到os.fork()时,操作系统会创建一个新的进程(子进程),然后复制父进程的所有信息到子进程中;然后父进程和子进程都从fork()函数中得到一个返回值,其进程中这个值一定是0,而父进程中是子进程的 id号;主:fock()函数只能在Unix/Linux/Mac上运行,windows不以运行。
import os
# 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以
pid = os.fork()
if pid == 0:
print('哈哈1')
else:
print('哈哈2')
os.getpid():获取到当前进程的PID号
os.getppid():获取到父进程的PID号
# 常用python解释器地址目录获取
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
__file__:当前文件
os.path.abspath(__file__):获取当前文件的指定路径
os.path.dirname():获取指定文件目录的父级目录
os.path.join():进行对应路径的拼接操作
2-2、文件与目录操作-sys(Python自身的运行环境)
import sys引用系统的包
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.argv[i] 获取到执行文件时,对应的参数信息
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdin 输入相关
sys.stdout 输出相关
sys.stderror 错误相关
sys.modules 是一个全局字典,该字典是Python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sysmodules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接字典中查找,从而加快了程序运行的速度。
3、数据处理与序列化
json:用于处理 JSON 格式的数据。
pickle:用于对象的序列化和反序列化。
csv:用于读写 CSV 文件。
xml:用于处理 XML 数据。
sqlite3:用于操作 SQLite 数据库。
3-1、数据处理与序列化-json(编码和解码 JSON 对象)
import json
json.dumps:将python对象进行序列化操作
json.loads:将python对象进行反序列化操作
4、网络与互联网
socket:提供了底层的网络通信功能。
http:提供了 HTTP 协议相关的模块,如 http.client、http.server。
urllib:用于处理 URL 和 HTTP 请求。
ftplib、smtplib、poplib:分别用于 FTP、SMTP 和 POP3 协议的操作。
email:用于处理电子邮件。
5、并发与并行
threading:提供了多线程支持。
multiprocessing:提供了多进程支持。
concurrent.futures:提供了线程池和进程池的高级接口。
asyncio:提供了异步 I/O 支持(Python 3.4+)。
5-1、并发与并行-threading(多线程)
1、线程应用的第一种模式thread模块是比较底层的模块
import thread:引用对应的模块包。
thread.start_new_thread(defName,())创建开启一个新的线程;第一个参数为新线程要执行的方法,第二个参数为元组传递执行方法对应需要 python元组为一个时需要(元素,)一个元素加一个','进行表示。
thread.exit_thread():主线程调用该方法表示所有的线程结束操作;子线程通过调用exit.thread()的方法来表示实现当前子线程的结束操 thread.join(): python的Thread类中还提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一eou 参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并
thread.setDaemon(True):默认情况主线程退出时会等待子线程的结束,如果希望主线程不等待子线程,可以设置子线程为后台线程,主线程退程 即结束。
2、线程应用的第二种模式threading模块是对thread模块进行了一定的封装,可以更方便我们的使用。
import threading:引用对应的模块包。
myThread=threading.Thread(target=defName,args=('Alice',))创建一个线程,target赋值要执行线程的方法,args复制执行方法需要的参
myThread.start():线程开始执行。
num=len(threading.enumerate):查看当前执行的线程的数量。
3、线程的应用的第三种方式创建一个线程类,继承基类threading.Thead;重写基类的def run(self):方法,将该线程要执行的程序写在该方法中。
class MyThread(threading.Thread):创建一个线程类
# 进行基类构造函数的创建操作
def __init__(self,name,time):
threading.Thread.__init__(self,name='可以为线程的名字进行复制')
myThread=MyThread():线程对象的创建。
myThread.start():该线程执行。
4、threading模块中定义了Lock()类,可以方便的处理锁定。
mutex=threading.Lock():互斥锁对象的创建。
if mutex.acquire([blocking]):进行锁定,锁定成功后返回true;锁定方法acquire()可以有一个blocking参数。如果设定blocking为,则当 线程会堵塞,直到获取到这个锁为止(如果没有指定,那么默认为True);如果设定blocking为False,则当前线程不会堵塞。
mutex.release():执行完程序内容后进行锁的释放操作。
5、支持同一线程多次请求同一资源,python提供了可重入锁。RLock对象中,同时维护着一个Lock和一个counter变量;counter变量存储acquire的而使得资源可以多次被acquire;直到一个线程中的所有的acquire被release,其他的线程才可以获得资源
mutex=threading.RLock():创建可重入锁对象。
mutex.acquire():进行上锁。
mutex.release():进行释放。
6、python提供的Condition对象提供了对复杂线程同步问题的支持;Condition被称为条件变量;Condition维护着一个锁和一个waiting池。
con=threading.Condition():创建条件变量对象;可以接受一个Lock/RLock对象作为参数,如果没有指定则内部默认创建一个RLock
con.acquire():进行加锁。
con.wait():线程会释放Condition内部的锁并进入blocked(堵塞)状态,同时在waiting池中记录这个线程。
con.notify():Condition对象会从waiting池中挑选一个线程,通知其调用acquire方法尝试取到锁。
con.notifyAll():Condition对象通知waiting池中所有的线程,尝试acquire内部锁。作用防止有的线程永远处于沉默状态。
con.release():进行释放。
threading.Event可以是一个线程等待其他线程的通知。其内置了一个标志,初始值为False。线程通过wait()方法进入等待状态,直到另一个线et( 方法将内置标志设置为True是,Event通知所有等待状态的线程回复运行。还可以用isSet()方法查询Event对象内置状态的当前值。
event=threading.Event():进行对应Envent对象的创建。
def __init__(self,threadName,event):
self.threadEvent=event :重构对应threading.Thread基类中__init__的方法。
self.threadEvent.wait():使线程进入等待状态。
event.set():启动waiting池中等待的线程。
5-2、并发与并行-multiprocessing(多进程)
# 进程创建:
from multiprocessing import Process:引用对应的包。
p=Process(target=run_proc,args=('test',)):调用Process类,进行进程对象的创建操作。为参数target赋值进程要实现的方法,为参数args赋传入对应的参数。
p.start():开启执行对应的进程操作。
p.join():等待当前进程执行结束,可以等待子进程结束后再继续向下运行,通常用于进程间的同步。
multiprocessing.cpu_count():获取到进程执行的所使用的cpu的内核个数。
pipe=multiprocessing.Pipe():管道实现进程间的通讯。一个管道有两个端口,分别为pipe[0]与pipe[1]
pipe[0].send(向管道中添加的数据):管道的添加操作。
pipe[0].recv():从管道中取出对应的数据信息。
from multiprocessing import Process,Queue:应用对应的包,为实现进程之间的通信操作;管道的俩个端一个是负责向里面写入数据,一个外面读取数据。
q=Queue():创建一个队列对象。
q.put(要添加到队列中的数据信息):将制定的数据添加到队列当中去。
q.get(True):从队列中要提取出的队列数据信息。
q.empty():判断当前队列是否为空。
6、时间与日期
time:提供了时间相关的函数,如获取当前时间、睡眠等。
datetime:提供了日期和时间处理功能。
calendar:提供了日历相关的功能。
7、数学与科学计算
math:提供了数学函数,如三角函数、对数、幂运算等。
random:提供了随机数生成功能。
statistics:提供了统计计算功能(Python 3.4+)。
decimal:提供了高精度的十进制浮点数运算。
fractions:提供了分数运算功能。
7-1、数学与科学计算-random(生成随机数)
import random:引用对应的包
random.random():默认在0到1之间随机获取数据信息。
random.shuffle(listObjact):混淆对应的列表
random.uniform(1,5):1到5之间随机获取对应的数值;包含小数部分。
random.randint(10.50):10到50之间对应随机获取对应的整数
random.randrange(0,51,2):0到51之间对应随机获取对应的3的倍数
8、调试与测试
logging:提供了日志记录功能。
unittest:提供了单元测试框架。
doctest:用于通过文档字符串进行测试。
pdb:提供了交互式调试工具。
9、国际化与本地化
gettext:用于国际化(i18n)和本地化(l10n)。
locale:用于处理本地化设置,如日期格式、货币符号等。
10、其他实用工具
re:提供了正则表达式支持。
argparse:用于解析命令行参数。
configparser:用于解析配置文件。
enum:提供了枚举类型支持(Python 3.4+)。
typing:提供了类型注解支持(Python 3.5+)。
10-1、其他实用工具-re(字符串正则匹配)
import re:引用对应的包
result=re.match(正则表达式,要匹配的字符串):从第一个字符向后依次进行正则匹配操作,匹配出对应的数据信息。
result.group():如果上一步匹配到数据的话,可以使用group方法来提取数据。
result=re.search(正则表达式,要匹配的字符串):从匹配到的第一个字符向后依次进行匹配操作。
result==None:判断获取的书数据是否为空。
re.search(r'\d+','my hight 177 cm').group():匹配出指定字符串中符合正则表达式的第一条数据(只能匹配一个)。
re.findall(r'\d+','my hight 177 cm my weight 100 kg'):配匹配出指定字符串中所有符合正则表达式的有效数据,并以列表的形式进行返re.sub(r'\d+','100','my high 177 cm'):将匹配到的数据进行替换,参数:对应的正则表达式,要替换的数据,匹配出来的数据;
方法一:
#coding=utf-8
import re
ret = re.sub(r"\d+", '998', "python = 997")
print ret
返回结果:998
方法二:
#coding=utf-8
import re
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r"\d+", add, "python = 997")
print ret
ret = re.sub(r"\d+", add, "python = 99")
print ret
# 返回结果:100
re.split(r':| ','address:beijing xxx@126.com'):根据匹配进行切割字符串,并返回一个列表。案例:根据:或空格进行字符串的切割操作,'address','beijing','xxx@126.com']
# 常用正则表达式:
# 1、获取1-365 范围内的
# /^[1-9]$|^\b[1-9]\d{0,1}\b$|^\b[1-2]\d\d\b$|^\b[3][0-5]\d\b$|^\b[3][0-6][0-5]\b$/
#
# 2、密码注册要求范文必须包含数字、小写字母、大写字母
# ^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*).{8,16}$
#
# 3、特殊字符
# ^['(',')','`','~','!','@','#','$','%','^','&','*','-','+','=','|','{','}','[',']',':',';',''','<','>',',','.','?','/']$
10-2、其他实用工具-uuid
import uuid
uuid.uuid4().bytes + uuid.uuid().bytes
import base64
base64.b64encode
10-3、其他实用工具-keyword (关键字)
import keyword:引用对应的包
keyword.kwlist():获取对应的列表,列表中存储python中的对应关键字
10-4、其他实用工具-heapq (排序)
# 千万数组耗时很短
import heapq
heapq.nlargest(n, iterable):对象降序排序后,去前n个数据
10-5、并发与并行-Queue(队列)
from Queue import Queue:引用对应的模块包。
queue=Queue():创建一个队列对象。
queue.qsize():获取队列中元素的数量。
queue.put(向队列中添加的数据):想队列中添加元素。
queue.set():从队列中取出元素。
queue.empty():判断队列是否为空。