Python标准库(Python自带的模块和包)

一、自带电池

"自带电池"指python语言的标准库,因为它包含了丰富的功能和工具,几乎可以满足大部分的开发需求,就像一个内置电池一样,所以python标准库被称之为"自带电池"。

二、操作系统接口

2.1 OS

python中的os模块提供了丰富的与操作系统交互的函数。开发人员可以通过os模块提供的函数对文件和目录执行系统命令,以及获取系统信息。

**注:**在调用时一定要使用 import os 而不能使用from os import *。这将避免内建的open()函数被os.open()隐式替代。(open和os.open的作用是有很大区别的)

os模块的常用函数和方法有:

  1. os.name:返回当前操作系统的名称,例如posix表示Linux、Unix或Mac OS X,nt表示Windows。

  2. os.getcwd():返回当前工作目录的路径。

  3. os.chdir(path):改变当前工作目录到指定的路径。

  4. os.listdir(path):返回指定路径下的文件和目录列表。

  5. os.mkdir(path):创建一个新目录。

  6. os.makedirs(path):递归地创建多个新目录。

  7. os.remove(path):删除指定的文件。

  8. os.rmdir(path):删除指定的目录。

  9. os.path.exists(path):判断指定路径是否存在。

  10. os.path.isfile(path):判断指定路径是否是一个文件。

  11. os.path.isdir(path):判断指定路径是否是一个目录。

  12. os.path.join(path1, path2, ...):将多个路径组合成一个路径。

  13. os.path.basename(path):返回路径中的文件名部分。

  14. os.path.dirname(path):返回路径中的目录部分。

  15. os.path.splitext(path):将路径分割成目录部分和扩展名部分。

示例:

# 使用os模块创建一个新文件夹,并将文件从一个文件夹移动到另一个文件夹
import os

# 创建一个新文件夹
os.mkdir('new_folder')

# 移动文件
src = 'old_folder/file.txt'
dst = 'new_folder/file.txt'
os.rename(src, dst)

2.2 shutil

shutil模块是Python的标准库之一,提供了更高级别的文件操作功能。它是os模块的补充,提供了一些更方便的函数来复制、移动、删除文件以及文件夹。

一些常用的shutil模块函数包括:

  1. shutil.copy(src, dst):将文件从src复制到dst。

  2. shutil.move(src, dst):将文件或文件夹从src移动到dst。

  3. shutil.rmtree(path):递归地删除指定路径下的所有文件和文件夹。

  4. shutil.make_archive(base_name, format, root_dir):创建一个压缩文件。

  5. shutil.unpack_archive(filename, extract_dir):解压缩文件。

    使用shutil模块复制一个文件,并删除一个文件夹

    import shutil

    复制文件

    src = 'old_folder/file.txt'
    dst = 'new_folder/file.txt'
    shutil.copy(src, dst)

    删除文件夹

    shutil.rmtree('old_folder')

三、文件通配符

Python的glob模块提供了一种方便的方法来查找符合特定模式的文件路径。使用glob模块可以使用通配符匹配文件名,例如查找所有以.txt结尾的文件或者所有以特定前缀开头的文件。

使用glob模块可以实现以下功能:

  1. 查找符合特定规则的文件名:可以使用通配符(如*?)来匹配文件名,以便查找符合特定模式的文件。例如,可以使用*.txt来查找当前目录下所有的txt文件。

  2. 遍历文件夹:可以使用通配符模式来遍历文件夹中的文件和子文件夹。可以使用*来配任意字符,使用**`来匹配任意路径。

下面是一些常用的glob模块函数和用法:

  1. glob.glob(path):返回一个包含符合指定规则的文件路径名的列表。path参数是一个字符串,可以包含通配符模式。例如,glob.glob('*.txt')将返回当前目录下所有的txt文件路径名的列表。

  2. glob.iglob(path):返回一个生成器,用于遍历符合指定规则的文件路径名。与glob.glob()不同的是,glob.iglob()是惰性生成器,逐个返回匹配的文件路径名,而不是一次性返回所有匹配的文件路径名。

  3. glob.escape(path):返回一个转义后的字符串,用于将特殊字符转义为普通字符。这在使用通配符模式时特别有用,可以确保特殊字符被视为普通字符而不是通配符。

示例:

使用glob模块来查找当前目录下所有的txt文件

import glob

txt_files = glob.glob('*.txt')
for file_path in txt_files:
    print(file_path)

三、字符串模式匹配

re模块是Python的正则表达式模块,提供了一种强大的方法来进行字符串模式匹配和搜索。通过使用正则表达式,可以查找、替换、分割和提取字符串中的特定模式。

下面是re模块的一些常用函数和方法:

  1. re.match(pattern, string, flags=0): 从字符串的起始位置开始匹配模式,如果匹配成功则返回一个匹配对象,否则返回None。

  2. re.search(pattern, string, flags=0): 在字符串中搜索匹配模式的第一个位置,如果匹配成功则返回一个匹配对象,否则返回None。

  3. re.findall(pattern, string, flags=0): 在字符串中找到匹配模式的所有子串,并以列表的形式返回。

  4. re.finditer(pattern, string, flags=0): 在字符串中找到匹配模式的所有子串,并以迭代器的形式返回。

  5. re.sub(pattern, repl, string, count=0, flags=0): 在字符串中找到匹配模式的子串,并用 repl 替换。如果 count 指定,则最多替换 count 次。

  6. re.split(pattern, string, maxsplit=0, flags=0): 根据模式的匹配项将字符串拆分为列表。

  7. re.compile(pattern, flags=0): 将正则表达式的字符串形式编译为正则表达式对象,可以提高匹配的效率。

  8. 匹配对象的方法:group()返回匹配的字符串,start()返回匹配的起始位置,end()返回匹配的结束位置,span()返回一个元组,包含匹配的起始和结束位置。

四、数据库连接

Python的标准库中提供了多个用于数据库连接和操作的模块,如sqlite3、MySQLdb、psycopg2等。这些模块可以用于连接和操作多种类型的数据库,并执行查询、插入、更新和删除操作。

4.1 sqlite3

是Python标准库中的一个模块,用于操作SQLite数据库。SQLite是一种轻量级的嵌入式数据库,不需要独立的服务器进程,可以直接访问数据库文件。sqlite3模块提供了一系列函数和方法来连接、查询和操作SQLite数据库。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')

# 创建一个游标对象
cursor = conn.cursor()

# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INT PRIMARY KEY NOT NULL,
                  name TEXT NOT NULL,
                  age INT NOT NULL);''')

# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")

# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 提交事务并关闭连接
conn.commit()
conn.close()

4.2 MySQLdb

是一个第三方模块,用于操作MySQL数据库。MySQLdb模块是Python对MySQL数据库的接口,可以通过该模块连接MySQL数据库服务器,并执行SQL语句进行数据的增删改查操作。

import MySQLdb

# 连接到MySQL数据库
conn = MySQLdb.connect(host='localhost',
                       user='root',
                       password='password',
                       db='test')

# 创建一个游标对象
cursor = conn.cursor()

# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INT PRIMARY KEY NOT NULL,
                  name VARCHAR(20) NOT NULL,
                  age INT NOT NULL);''')

# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")

# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 提交事务并关闭连接
conn.commit()
conn.close()

4.3 psycopg2

是一个第三方模块,用于操作PostgreSQL数据库。PostgreSQL是一种开源的关系型数据库管理系统,而psycopg2模块是Python对PostgreSQL数据库的接口,可以通过该模块连接PostgreSQL数据库服务器,并执行SQL语句进行数据的增删改查操作。

import psycopg2

# 连接到PostgreSQL数据库
conn = psycopg2.connect(host='localhost',
                        user='postgres',
                        password='password',
                        dbname='test')

# 创建一个游标对象
cursor = conn.cursor()

# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INT PRIMARY KEY NOT NULL,
                  name VARCHAR(20) NOT NULL,
                  age INT NOT NULL);''')

# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")

# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 提交事务并关闭连接
conn.commit()
conn.close()

五、网络通讯

5.1 urllib.request

urllib.request模块是Python标准库中用于进行HTTP请求的模块。它提供了一种更简单和高级的方式来发送HTTP请求,处理响应以及处理URL。

urllib.request模块中的主要函数和类包括:

  1. urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None): 打开一个URL并返回一个类似文件的对象。可以使用该对象来读取URL的内容。

  2. Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None): 创建一个HTTP请求对象。可以设置请求的URL、数据、头部信息等。

  3. urlretrieve(url, filename=None, reporthook=None, data=None): 下载一个URL的内容,并将其保存到本地文件中。

  4. build_opener(*handlers): 创建一个自定义的URL打开器,可以用于处理特定的URL请求。

  5. ProxyHandler(proxies=None): 创建一个处理代理服务器的处理器。

使用urllib.request模块进行HTTP请求的基本步骤如下:

  1. 导入urllib.request模块。
  2. 使用urlopen()函数打开一个URL,或者创建一个Request对象。
  3. 可以通过读取返回的类文件对象来获取URL的内容。
  4. 可以使用urlretrieve()函数将URL的内容保存到本地文件中。

以下是一个简单的示例代码,演示如何使用

import urllib.request

# 打开一个URL并读取内容
response = urllib.request.urlopen('http://www.example.com')
html = response.read()
print(html)

# 下载一个URL的内容并保存到本地文件
urllib.request.urlretrieve('http://www.example.com', 'example.html')

5.2 socket模块

Python的socket模块提供了一种在网络上进行通信的方式。使用socket模块,可以创建网络套接字并通过网络发送和接收数据。此外,Python的标准库还提供了其他一些模块,如http.client、urllib等,用于处理HTTP请求和访问Web资源。

以下是socket模块的一些常用函数和方法:

  1. socket():创建一个socket对象,用于进行网络通信。可以指定协议类型、套接字类型等参数。

  2. bind():绑定一个地址(主机名和端口号)到socket对象上。

  3. listen():开始监听连接请求,使socket对象成为一个服务器端套接字。

  4. accept():接受一个客户端连接请求,并返回一个新的socket对象,用于与客户端进行通信。

  5. connect():与服务器端建立连接,使socket对象成为一个客户端套接字。

  6. send():发送数据到连接的另一端。

  7. recv():接收连接的另一端发送的数据。

  8. close():关闭socket连接。

  9. setsockopt():设置socket的选项。

示例:

使用socket模块请求web资源:

import socket

def request_web_resource(host, port, path):
    # 创建一个TCP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 建立与服务器的连接
    client_socket.connect((host, port))
    
    # 构造HTTP请求
    request = f"GET {path} HTTP/1.1\r\nHost: {host}\r\n\r\n"
    
    # 发送HTTP请求
    client_socket.sendall(request.encode())
    
    # 接收服务器的响应
    response = b""
    while True:
        data = client_socket.recv(4096)
        if not data:
            break
        response += data
    
    # 关闭连接
    client_socket.close()
    
    # 打印服务器的响应
    print(response.decode())

# 调用函数请求web资源
request_web_resource("www.example.com", 80, "/index.html")

六、数学运算

Python的标准库中提供了一些用于数学运算的模块,如math、random等。math模块提供了一些常用的数学函数,如三角函数、指数函数、对数函数等。random模块可以生成随机数,进行随机选择和洗牌操作。

6.1 math

math库提供了丰富的数学运算函数,例如常见的对数、三角函数等。(详情点击连接可看)

示例:

import math

math.cos(math.pi / 4)# 输出:0.70710678118654757
math.log(1024,2)# 输出:10

6.2 Random

Random库提供了生成随机数的函数。(函数很多,详见请点击链接)

通常使用的函数包含以下几种:

  1. random.random(): 返回一个0到1之间的随机浮点数。

  2. random.randint(a, b): 返回一个在指定范围内的随机整数,包括a和b。

  3. random.choice(seq): 从给定的序列中随机选择一个元素。

  4. random.shuffle(seq): 将给定序列中的元素随机排序。

  5. random.sample(population, k): 从给定的总体中随机选择k个不重复的元素。

  6. random.uniform(a, b): 返回一个在指定范围内的随机浮点数,包括a和b。

  7. random.seed(a=None): 初始化随机数生成器的种子。

展示了如何使用random模块的一些常用函数:

import random

# 生成一个0到1之间的随机浮点数
print(random.random())

# 生成一个在指定范围内的随机整数
print(random.randint(1, 10))

# 从给定的序列中随机选择一个元素
colors = ['red', 'blue', 'green']
print(random.choice(colors))

# 将给定序列中的元素随机排序
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)

# 从给定的总体中随机选择k个不重复的元素
population = ['apple', 'banana', 'orange', 'grape', 'watermelon']
sample = random.sample(population, 3)
print(sample)

# 生成一个在指定范围内的随机浮点数
print(random.uniform(0.5, 1.5))

# 初始化随机数生成器的种子
random.seed(123)
print(random.random())

6.3 statistics

statistics库常用于数理统计,可以计算数据的基本属性(基本统计属性(均值,中位数,方差等)。

以下是一些常用的statistics模块函数:

  1. mean(data): 计算数据的算术平均值。

  2. median(data): 计算数据的中位数。

  3. mode(data): 计算数据的众数。

  4. stdev(data): 计算数据的标准差。

  5. variance(data): 计算数据的方差。

  6. harmonic_mean(data): 计算数据的调和平均值。

  7. median_low(data): 计算数据的低中位数。

  8. median_high(data): 计算数据的高中位数。

  9. median_grouped(data, interval=1): 计算数据的分组中位数。

示例:

import statistics

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 计算数据的算术平均值
print(statistics.mean(data))

# 计算数据的中位数
print(statistics.median(data))

# 计算数据的众数
print(statistics.mode(data))

# 计算数据的标准差
print(statistics.stdev(data))

# 计算数据的方差
print(statistics.variance(data))

# 计算数据的调和平均值
print(statistics.harmonic_mean(data))

# 计算数据的低中位数
print(statistics.median_low(data))

# 计算数据的高中位数
print(statistics.median_high(data))

# 计算数据的分组中位数
print(statistics.median_grouped(data, interval=2))

七、日期和时间

Python的datetime模块提供了处理日期和时间的功能。可以使用datetime模块来创建日期和时间对象,并进行日期和时间的计算、格式化和解析。

以下是一些常用的datetime模块的类和函数:

  1. datetime.datetime: 表示一个具体的日期和时间,包括年、月、日、时、分、秒和微秒。

  2. datetime.date: 表示一个具体的日期,包括年、月、日。

  3. datetime.time: 表示一个具体的时间,包括时、分、秒和微秒。

  4. datetime.timedelta: 表示两个日期或时间之间的差值,可以用于日期和时间的加减运算。

  5. datetime.now(): 返回当前的日期和时间。

  6. datetime.today(): 返回当前的日期。

  7. datetime.strptime(date_string, format): 将一个字符串解析为日期或时间对象,需要指定解析格式。

  8. datetime.strftime(format): 将一个日期或时间对象格式化为字符串,需要指定格式化格式。

示例:

import datetime

# 获取当前的日期和时间
now = datetime.datetime.now()
print(now)

# 获取当前的日期
today = datetime.datetime.today().date()
print(today)

# 创建一个指定日期和时间的datetime对象
dt = datetime.datetime(2023, 9, 19, 14, 30, 0)
print(dt)

# 计算两个日期之间的差值
delta = datetime.timedelta(days=7)
new_date = today + delta
print(new_date)

# 将字符串解析为日期对象
date_string = "2023-09-19"
date = datetime.datetime.strptime(date_string, "%Y-%m-%d")
print(date)

# 将日期对象格式化为字符串
formatted_date = date.strftime("%Y-%m-%d")
print(formatted_date)

八、数据压缩

Python的标准库中提供了一些用于数据压缩和解压缩的模块,如gzip、zipfile等。这些模块可以用于创建和解压缩压缩文件,如gzip压缩文件、ZIP压缩文件等。

1.gzip模块:gzip模块提供了gzip文件的压缩和解压缩功能。可以使用gzip模块中的GzipFile类来创建gzip文件对象,然后使用write()方法来写入压缩数据,最后使用close()方法关闭文件。

import bz2

# 压缩文件
with open('file.txt', 'rb') as f_in:
    with bz2.open('file.txt.bz2', 'wb') as f_out:
        f_out.write(f_in.read())

# 解压文件
with bz2.open('file.txt.bz2', 'rb') as f_in:
    with open('file.txt', 'wb') as f_out:
        f_out.write(f_in.read())

2.zipfile是Python标准库中用于处理ZIP文件的模块。它提供了一种简单的方式来创建、读取和修改ZIP文件。

import zipfile

# 创建zip文件
with zipfile.ZipFile('example.zip', 'w') as zf:
    zf.write('file1.txt')
    zf.write('file2.txt')

#解压zip文件
with zipfile.ZipFile('example.zip', 'r') as zf:
    zf.extractall('extracted_files')

#读取zip文件
with zipfile.ZipFile('example.zip', 'r') as zf:
    file_list = zf.namelist()
    file_info = zf.getinfo('file1.txt')
    with zf.open('file1.txt') as f:
        content = f.read()

#修改zip文件
with zipfile.ZipFile('example.zip', 'a') as zf:
    zf.write('file3.txt')
    zf.extract('file1.txt', 'extracted_files')
    zf.remove('file2.txt')

九、性能测量

Python的标准库中提供了一些用于性能测量和优化的模块,如timeit、profile等。timeit模块用于测量代码的执行时间,profile模块用于分析代码的性能瓶颈。这些模块可以帮助开发者找到代码中的性能问题,并进行优化。

Python标准库中的性能测试相关模块:

  1. timeit模块:timeit模块提供了一个简单的接口来测量小段代码的执行时间。可以使用它来比较不同实现方式的性能差异。

  2. cProfile模块:cProfile模块提供了一个分析器,用于确定代码中的瓶颈所在。它可以生成一个详细的性能分析报告,帮助开发者找出性能问题所在。

  3. profile模块:profile模块是cProfile模块的一个简化版本,它提供了一个简单的性能分析工具。

  4. hotshot模块:hotshot模块是一个高性能的分析器,可以用于测量代码的执行时间和函数调用次数。

  5. sys模块:sys模块提供了一些与Python解释器和系统相关的功能。其中包括sys.getsizeof()函数,可以用来测量对象的内存使用情况。

十、质量控制

Python标准库中的质量控制模块为"unittest",它提供了一种用于编写和运行测试的框架。

unittest模块基于xUnit测试框架的设计思想,提供了一组用于编写测试用例和进行断言的类和方法。通过使用unittest模块,开发者可以轻松地进行单元测试和集成测试,以确保代码的质量。

以下是unittest模块的一些关键概念和功能:

  1. 测试用例(Test Case):单个测试单元,通常是一个函数或方法,用于验证代码的特定行为。

  2. 测试套件(Test Suite):一组测试用例的集合,可以一次运行多个测试用例。

  3. 断言(Assertion):用于验证代码输出是否符合预期的语句。unittest模块提供了多种断言方法,如assertEqual()、assertTrue()、assertFalse()等。

  4. 测试运行器(Test Runner):用于运行测试套件中的测试用例,并生成测试结果报告。unittest模块提供了多种测试运行器,如TextTestRunner、HTMLTestRunner等。

  5. 测试装置(Test Fixture):用于准备测试环境和清理测试环境的方法。例如,setUp()方法用于在执行每个测试用例之前设置测试环境,tearDown()方法用于在执行每个测试用例之后清理测试环境。

使用unittest模块编写测试用例的一般步骤如下:

  1. 导入unittest模块和要测试的模块。

  2. 创建一个测试类,继承unittest.TestCase。

  3. 在测试类中定义测试方法,方法名以"test_"开头。

  4. 在每个测试方法中,编写测试逻辑,并使用断言方法验证代码输出是否符合预期。

  5. 使用unittest的测试运行器运行测试用例。

相关推荐
Bruce小鬼8 分钟前
QT文件基本操作
开发语言·qt
2202_7544215414 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热21 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
LZXCyrus22 分钟前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
Enougme25 分钟前
Appium常用的使用方法(一)
python·appium
懷淰メ30 分钟前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm44 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
宁静@星空1 小时前
006-自定义枚举注解
java·开发语言
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
武子康1 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot