Python基础:标准库概览
1. 标准库介绍
Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。这个库包含了多个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Python 编写的模块,提供了日常编程中许多问题的标准解决方案。其中有些模块经过专门设计,通过将特定平台功能抽象化为平台中立的 API 来鼓励和加强 Python 程序的可移植性。
Windows 版本的 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。对于类 Unix 操作系统,Python 通常会分成一系列的软件包,因此可能需要使用操作系统所提供的包管理工具来获取部分或全部可选组件。
在标准库以外,还存在成千上万并且不断增加的其他组件集(从单独的程序和模块到软件包以及完整的应用程序开发框架),这些组件集可以从Python 包索引 https://pypi.org 获取。
2. 常见的一些标准库
下面的表格罗列了一些常用的模块,但还只是标准库的很少的一部分,具体使用需要根据需求来定。
模块名称 | 描述 | 功能和示例 |
---|---|---|
math | 数学运算函数 | 提供基本的数学运算,如三角函数、对数等。例如:math.sin(90) 返回正弦值 1.0。 |
random | 生成伪随机数 | 生成随机数,可用于模拟随机事件。例如:random.randint(1, 10) 生成1到10之间的随机整数。 |
os | 操作系统功能 | 提供与操作系统交互的功能,如文件和目录操作。例如:os.listdir('.') 返回当前目录下的文件列表。 |
sys | 提供 Python 解释器的变量和函数 | 提供访问和操作 Python 解释器的变量和功能。例如:sys.argv 包含命令行参数的列表。 |
datetime | 处理日期和时间 | 提供处理日期和时间的类和函数。例如:datetime.now() 返回当前日期和时间。 |
time | 处理时间和时间戳 | 提供处理时间和时间戳的函数。例如:time.sleep(2) 暂停程序执行 2 秒。 |
calendar | 处理日期和时间的日历函数 | 提供处理日期和时间的日历功能。例如:calendar.isleap(2023) 判断2023年是否为闰年。 |
collections | 高性能容器数据类型 | 提供额外的数据类型,如命名元组、计数器等。例如:collections.Counter([1, 2, 1, 3, 2, 4]) 统计元素出现次数。 |
itertools | 提供用于操作迭代器的函数 | 提供迭代器操作的工具函数。例如:itertools.product('AB', repeat=2) 返回笛卡尔积。 |
json | 处理 JSON 数据格式 | 提供 JSON 数据的编码和解码功能。例如:json.dumps({"name": "John", "age": 30}, indent=2) 将字典转换为美观的 JSON 字符串。 |
re | 正则表达式操作 | 提供正则表达式的功能,用于模式匹配。例如:re.search(r'\d+', 'Age: 30') 匹配字符串中的数字。 |
urllib | 处理 URL | 提供处理 URL 的模块,包括打开、读取、解析 URL。例如:urllib.request.urlopen('https://www.example.com') 打开一个 URL。 |
http | 提供基本的 HTTP 服务器和客户端功能 | 提供创建简单 HTTP 服务器和客户端的功能。例如:http.server.SimpleHTTPRequestHandler 创建一个简单的 HTTP 服务器。 |
socket | 提供套接字编程的接口 | 提供网络编程的功能,包括创建套接字、发送和接收数据。例如:创建一个服务器套接字。 |
email | 处理电子邮件 | 提供创建和解析电子邮件的功能。例如:创建一个简单的文本邮件。 |
sqlite3 | SQLite 数据库接口 | 提供与 SQLite 数据库交互的功能。例如:连接到数据库、执行 SQL 查询。 |
csv | 处理 CSV 文件格式 | 提供读写 CSV 文件的功能。例如:读取和写入 CSV 文件。 |
xml | 处理 XML 数据 | 提供处理 XML 数据的功能。例如:解析和生成 XML 文件。 |
tkinter | GUI 编程工具包 | 提供创建图形用户界面的功能。例如:创建一个简单的窗口和按钮。 |
threading | 多线程编程 | 提供创建和管理线程的功能。例如:创建一个简单的线程。 |
multiprocessing | 多进程编程 | 提供创建和管理进程的功能。例如:创建一个简单的子进程。 |
subprocess | 启动和控制子进程 | 提供启动和控制子进程的功能。例如:执行外部命令。 |
logging | 日志记录工具 | 提供记录日志的功能。例如:配置日志记录器并记录消息。 |
unittest | 单元测试框架 | 提供单元测试的功能。例如:编写和运行测试用例。 |
doctest | 用于测试文档中的示例代码 | 提供从文档字符串中提取和运行测试的功能。例如:在文档中编写测试用例。 |
argparse | 命令行参数解析 | 提供解析命令行参数的功能。例如:定义和解析命令行参数。 |
pickle | 对象序列化和反序列化 | 提供将 Python 对象转换为字节流的功能。例如:将对象保存到文件和从文件加载。 |
shutil | 文件操作工具 | 提供对文件和目录进行高级操作的功能。例如:复制、移动文件和目录。 |
gzip | 支持对 GZIP 格式的文件进行压缩和解压缩 | 提供对 GZIP 格式文件的压缩和解压缩功能。例如:压缩和解压缩文件。 |
tarfile | 处理 tar 文件格式 | 提供处理 tar 文件的功能。例如:创建和提取 tar 文件。 |
zipfile | 处理 ZIP 文件格式 | 提供处理 ZIP 文件的功能。例如:创建和提取 ZIP 文件。 |
3. 部分模块的示例
3.1 操作系统 - os
提供与操作系统交互的功能,包括文件和目录操作。
import os# 获取当前工作目录
current_directory = os.getcwd()
print("Current Directory:", current_directory)# 列出目录中的文件
files_in_directory = os.listdir(current_directory)
print("Files in Directory:", files_in_directory)# 创建目录
os.mkdir("example_directory")# 删除目录
os.rmdir("example_directory")
3.2 文件通配符 - glob
提供文件名的模式匹配功能。
import glob# 匹配当前目录下所有的 .txt 文件
txt_files = glob.glob('*.txt')
print(f"匹配的 .txt 文件:{txt_files}")
3.3 命令行参数 - sys 和 argparse
sys 提供对 Python 解释器的变量和函数的访问,而 argparse 用于解析命令行参数。
import sys
import argparse# 使用 sys 获取命令行参数
script_name = sys.argv[0]
print(f"脚本名称:{script_name}")# 使用 argparse 解析命令行参数
parser = argparse.ArgumentParser(description='描述脚本用途')
parser.add_argument('--input', help='输入文件路径')
args = parser.parse_args()
input_file = args.input
print(f"输入文件路径:{input_file}")
3.4 错误输出重定向和程序终止 - sys
import systry:# 模拟错误raise ValueError("这是一个错误")
except ValueError as e:# 将错误信息输出到标准错误流print(f"发生错误:{e}", file=sys.stderr)# 终止程序sys.exit(1)
3.5 字符串正则匹配 - re
提供正则表达式的功能,用于模式匹配。
更多关于Python正则匹配可以参考下面博文:
Python基础:正则表达式(regular expression)详解
import re# 匹配字符串中的数字
result = re.search(r'\d+', 'Age: 30')
if result:matched_number = result.group()print(f"匹配到的数字:{matched_number}")
3.6 数学 - math
提供数学运算函数
import math# 计算正弦值
sin_value = math.sin(math.radians(90))
print(f"正弦值:{sin_value}")
3.7 访问互联网 - urllib
提供处理 URL 的模块,包括打开、读取、解析 URL。
from urllib.request import urlopen# 打开并读取 URL 内容
with urlopen('https://www.example.com') as response:content = response.read().decode('utf-8')print(f"URL 内容:{content}")
3.8 日期和时间 - datetime
提供处理日期和时间的类和函数。
from datetime import datetime# 获取当前日期和时间
current_datetime = datetime.now()
print(f"当前日期和时间:{current_datetime}")
3.9 数据压缩 - gzip
提供对 GZIP 格式的文件进行压缩和解压缩功能。
import gzip# 压缩文件
with open('example.txt', 'rb') as file:with gzip.open('example.txt.gz', 'wb') as compressed_file:compressed_file.writelines(file)# 解压缩文件
with gzip.open('example.txt.gz', 'rb') as compressed_file:content = compressed_file.read().decode('utf-8')print(f"解压缩后的内容:{content}")
3.10 性能度量 - timeit
用于测试代码段的执行时间
import timeit# 测量代码执行时间
def example_function():result = sum(range(1000))execution_time = timeit.timeit(example_function, number=10000)
print(f"代码执行时间:{execution_time} 秒")
3.11 测试模块 - unittest
提供单元测试功能
import unittest# 编写测试用例
class ExampleTestCase(unittest.TestCase):def test_addition(self):self.assertEqual(1 + 1, 2)# 运行测试
if __name__ == '__main__':unittest.main()
4. 使用标准库注意事项
使用 Python 标准库是编写稳健、可维护和跨平台的 Python 代码的关键部分。
- 版本兼容性
不同版本的 Python 可能会引入新的模块或对现有模块进行更改。确保你的代码适用于你所使用的 Python 版本,查阅相应版本的官方文档。 - 异常处理
标准库中的函数和模块可能会引发异常。在使用它们时,确保进行适当的异常处理以防止程序崩溃。 - 文档查阅
Python 提供了详细的官方文档,其中包含对每个模块和函数的详细说明。在使用标准库的特定部分之前,请查阅相应的文档以了解其功能和用法。 - 模块导入
了解如何正确导入模块是重要的。有时候,你可能只需要导入模块的一部分而不是全部。例如,使用 from module import function 语法。 - 模块的性能
一些模块可能会影响程序的性能。在处理大量数据或需要高性能的情况下,考虑使用专门设计的库或工具。 - 可移植性
虽然标准库是 Python 的一部分,但并不是所有模块在所有平台上都是完全相同的。确保你的代码在目标平台上能够正确运行。 - 虚拟环境
在项目中使用虚拟环境是一个良好的实践,它可以确保你的项目在不同环境中具有相同的依赖关系。 - 第三方库
在某些情况下,可能有更好的第三方库可用,提供了比标准库更强大或更专业的功能。在选择使用标准库还是第三方库时,要根据具体需求和项目要求做出明智的选择。 - 更新和维护
定期检查 Python 的更新,并确保你的代码能够在最新版本的 Python 中运行。标准库中的一些模块可能会在后续版本中进行改进或修复 bug。 - 国际化
如果你的应用程序涉及到国际化和本地化,了解标准库中与这些方面相关的模块,如 locale 和 gettext。
5. 参考
官网:
https://docs.python.org/zh-cn/3/library/index.html
菜鸟教程:
https://www.runoob.com/python3/python3-stdlib.html
相关文章:

Python基础:标准库概览
1. 标准库介绍 Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。这个库包含了多个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Pyt…...

C#,《小白学程序》第三课:类class,类的数组及类数组的排序
类class把数值与功能巧妙的进行了结合,是编程技术的主要进步。 下面的程序你可以确立 分数 与 姓名 之间关系,并排序。 1 文本格式 /// <summary> /// 同学信息类 /// </summary> public class Classmate { /// <summary> /…...

建筑结构健康监测系统和传统人工监测的区别
在繁华的城市里,建筑结构作为城市生命线的重要一环,其安全与稳定对城市的运转和居民的生活至关重要。为了更好地守护建筑结构的健康,WITBEE万宾自主研发建筑结构健康监测系统让建筑安全,在上一个台阶。 WITBEE万宾建筑结构健康监测…...

二 使用GPIO的复用功能 利用USART 实现printf()
参考这篇: STM32串口通信详解 1. 关于USART USART ( universal synchronous / asynchronous receiver /transmitter) 是一种串行通讯协议 , 允许设备通过串行端口进行数据传输, USART 能够以同步或者异步的方式进行工作,在实际的运用中&…...
C#中的警告CS0120、CS0176、CS0183、CS0618、CS0649、CS8600、CS8601、CS8602、CS8604、CS8625及处理
目录 一、CS0120 二、CS0176 1.解决前 2.解决后 3.解决办法 三、CS0183 四、CS0618 五、CS8600 六、CS8602 七、CS8622 1. 解决前: 2. 解决后: 3.解决方法: 八、CS8604和CS8625 九、CS0649 十、CS8601 一、CS0120 严重性 代…...
js中声明变量的关键字(const,let,var)
const 特点: const不允许在同一作用域重复声明,块级作用域暂时性死区,在声明之前,该变量是不可用的const声明的是一个只读变量,声明之后不能改变其值,一旦声明必须初始化但是const定义的对象属性是可以修…...
Android13 launcher循环切页
launcher 常规切页:https://blog.csdn.net/a396604593/article/details/125305234 循环切页 我们知道,launcher切页是在packages\apps\Launcher3\src\com\android\launcher3\PagedView.java的onTouchEvent中实现的。 1、滑动限制 public boolean onT…...

Java学习路线第一篇:Java基础(2)
这篇则分享Java学习路线第一part:Java基础(2) 从看到这篇内容开始,你就是被选定的天命骚年,将承担起学完Java基础的使命,本使命为单向契约,你可选择YES或者选择YES。 具体路线安排:…...

网络工程师精华篇,50种网络故障及解决方法大集合
上午好,我的网工朋友。 做网络工程师,自然离不开网络,而日常工作中能搞多少大项目?最常见的其实还是网络故障的处理了。 怎么最高效地排查网络故障?怎么简单几招通网? 今天就从基础的入手,分…...
Unity播放网络视频
using System.Collections; using System.Collections.Generic; using UnityEngine; using Mx.UI; using Mx.Utils; using UnityEngine.UI; using UnityEngine.Video; /// <summary> 视频UI面板 </summary> public class VideoUIForm : BaseUIForm { private …...

SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测
SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测 目录 SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-CNN-LSTM-selfAttention灰狼算法优化卷积长短…...

线性分类器--图像表示
整个模型 图像表示 二进制图像 灰度图像 彩色图像 大多数分类算法都要求输入向量! rbg的图像矩阵转列向量 大小为 32X32 的话,图像矩阵转列向量是多少维? 32x32x3 3072 维列向量...

车载通信架构 —— 传统车内通信网络FlexRay(较高速度高容错、较灵活拓扑结构)
车载通信架构 —— 传统车内通信网络FlexRay(较高速度高容错、较灵活拓扑结构) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,…...

如何在Ubuntu的Linux系统中安装MySQL5.7数据库
前往MySQL数据库官网链接地址下载5.7数据库。 MySQL :: Download MySQL Community Server (Archived Versions)使用ssh的可视化工具将下载的mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz文件上传到Linux服务器,并解压文件 tar -zxvf mysql-5.7.40-linux-glibc2.12-x…...
基于Hadoop的区块链海量数据存储的设计与实现
点我完整下载:基于Hadoop的区块链海量数据存储的设计与实现.docx 基于Hadoop的区块链海量数据存储的设计与实现 Design and Implementation of Mass Data Storage for Blockchain based on Hadoop 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 4 1.2 研…...

运行时错误/缺陷到底是什么缺陷
运行时错误(Run-time Error)是一种跟程序运行状态相关的缺陷。这类缺陷不能通过直接禁用相关特性来屏蔽,而是需要通过分析变量的数值状态来发现可能的异常。简单来说,这些缺陷通常只有当程序执行起来以后,才能逐渐暴露出的缺陷,一…...

应用Web3.0的5种方法提升你的点击量
Web3.0早已成为互联网的全新方向标,为用户带来全新的手机上网感受。它也变成吸引住点击量疯涨的秘密武器。我们将要详细介绍Web3.0的五种使用方法,帮助你更好的了解并应用Web3.0技术性,以提升你的点击量。 1.可靠的身份认证Web3.0技术性提供了…...

计算机服务器中了mallox勒索病毒如何处理,mallox勒索病毒解密文件恢复
科技技术的发展推动了企业的生产运营,网络技术的不断应用,极大地方便了企业日常生产生活,但网络毕竟是一把双刃剑,网络安全威胁一直存在,近期,云天数据恢复中心接到很多企业的求助,企业的计算机…...

408—电子笔记分享
一、笔记下载 链接:https://pan.baidu.com/s/1bFz8IX6EkFMWTfY9ozvVpg?pwddeng 提取码:deng b站视频:408-计算机网络-笔记分享_哔哩哔哩_bilibili 包含了408四门科目(数据结构、操作系统、计算机组成原理、计算机网络)…...

【每日一题】子数组的最小值之和
文章目录 Tag题目来源题目解读解题思路方法一:贡献法单调栈 写在最后 Tag 【贡献法】【单调栈】【数组】【2023-11-27】 题目来源 907. 子数组的最小值之和 题目解读 计算整数数组的连续子数组中最小值的和。 解题思路 本题朴素的解决思想是求出所有的连续子数组…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...