Python-标准库

标准库-简介

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 等。
1-1、内置函数和数据类型-functools(常用的工具)
概念:
    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():判断队列是否为空。

posted on 2016-10-24 07:27  cloud_wh  阅读(259)  评论(0编辑  收藏  举报

导航