当前位置: 首页 > news >正文

Python 常用模块

在 Python 编程中,模块是代码复用和功能扩展的重要方式。本文将详细介绍 Python 中一些常用的模块,包括时间处理、随机数生成、文件操作、数据序列化、日志记录等,帮助你快速掌握这些模块的使用方法,提升编程效率。

一、Time 模块:时间处理的利器

Time 模块提供了处理时间的各种功能,主要包括时间戳、格式化时间和结构化时间三种时间表示方式。

1. 时间戳

时间戳是从 1970 年 1 月 1 日 00:00:00 开始到现在的秒数,是一个浮点数。

import time
time_stamp = time.time()
print(time_stamp, type(time_stamp))  # 输出类似:1729987200.123456 <class 'float'>

2. 格式化时间

格式化时间是将时间按照指定的格式转换为字符串,方便阅读和展示。

format_time = time.strftime("%Y-%m-%d %X")
print(format_time, type(format_time))  # 输出类似:2024-10-25 15:30:45 <class 'str'>

其中,%Y 表示年份,%m 表示月份,%d 表示日期,%X 表示时间(包含时、分、秒)。

3. 结构化时间

结构化时间是一个包含年、月、日、时、分、秒等信息的元组,便于对时间的各个部分进行操作。

print('本地时区的struct_time:\n{}'.format(time.localtime()))
print('UTC时区的struct_time:\n{}'.format(time.gmtime()))

输出结果类似:

本地时区的struct_time:
time.struct_time(tm_year=2024, tm_mon=10, tm_mday=25, tm_hour=15, tm_min=32, tm_sec=10, tm_wday=4, tm_yday=299, tm_isdst=0)
UTC时区的struct_time:
time.struct_time(tm_year=2024, tm_mon=10, tm_mday=25, tm_hour=7, tm_min=32, tm_sec=10, tm_wday=4, tm_yday=299, tm_isdst=0)

4. 常见用法:计算程序执行时间

通过记录程序开始和结束的时间戳,可计算程序的执行时间。

start = time.time()
time.sleep(3)  # 暂停 3 秒
end = time.time()
print(end - start)  # 输出约为 3.0

二、datetime 模块:更便捷的时间加减

datetime 模块在 time 模块的基础上提供了更直观的时间操作,尤其适合进行时间的加减运算。

import datetime# 获取当前时间
print(datetime.datetime.now())  # 输出类似:2024-10-25 15:35:20.123456# 时间加减
print(datetime.datetime.now() + datetime.timedelta(3))  # 当前时间 + 3 天
print(datetime.datetime.now() + datetime.timedelta(-3))  # 当前时间 - 3 天
print(datetime.datetime.now() + datetime.timedelta(minutes=30))  # 当前时间 + 30 分钟# 时间替换
c_time = datetime.datetime.now()
print(c_time.replace(minute=20, hour=5, second=13))  # 将时间替换为指定的时、分、秒# 时间戳转换为日期
print(datetime.date.fromtimestamp(time.time()))  # 输出类似:2024-10-25

三、random 模块:随机数生成

random 模块用于生成各种随机数,在游戏、抽样、加密等场景中广泛应用。

import random# 生成 0-1 之间的随机小数
print(random.random())  # 输出类似:0.67891234# 生成指定范围内的随机整数(包含端点)
print(random.randint(1, 3))  # 可能输出 1、2 或 3# 生成指定范围内的随机小数
print(random.uniform(1, 3))  # 输出类似:1.927109612082716# 从列表中随机选择一个元素
print(random.choice([1, '23', [4, 5]]))  # 可能输出 1、'23' 或 [4,5]# 从列表中随机选择指定数量的元素(不重复)
print(random.sample([1, '23', [4, 5]], 2))  # 输出类似:[[4, 5], '23']# 打乱列表顺序(原地操作)
lis = [1, 3, 5, 7, 9]
random.shuffle(lis)
print(lis)  # 输出类似:[1, 9, 3, 7, 5]

四、os 模块:与操作系统交互

os 模块提供了与操作系统进行交互的功能,如文件路径操作、目录管理等。

1. 常用路径操作

import os# 获取当前文件的绝对路径(包含文件名)
print(os.path.abspath(__file__))# 获取当前文件的父路径
print(os.path.dirname(os.path.abspath(__file__)))# 获取当前文件的父父路径
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))# 分割路径和文件名
print(os.path.split('C:\\WINDOWS\\system32\\cmd.exe'))  # 输出:('C:\\WINDOWS\\system32', 'cmd.exe')# 拼接路径
print(os.path.join('C:\\WINDOWS\\system32', 'hello'))  # 输出:'C:\\WINDOWS\\system32\\hello'# 获取文件大小(字节)
print(os.path.getsize('C:\\WINDOWS\\system32\\cmd.exe'))

五、sys 模块:与 Python 解释器交互

sys 模块用于与 Python 解释器进行交互,获取解释器相关信息或控制解释器行为。

1. 常用功能

  • sys.path:返回模块的搜索路径,初始化时使用 PYTHONPATH 环境变量的值。
  • sys.version:获取 Python 解释器的版本信息。
  • sys.exit(n):退出程序,正常退出时使用 exit(0)

2. 实战案例:实现进度条

import sys
import timedef progress(percent, width=100):if percent >= 1:percent = 1show_str = ('[%%-%ds]' % width) % (int(width * percent) * '#')print('\r%s %d%%' % (show_str, int(100 * percent)), file=sys.stdout, flush=True, end='')time.sleep(0.1)# 模拟数据传输进度
data_size = 1025
recv_size = 0
while recv_size < data_size:time.sleep(0.1)  # 模拟延迟recv_size += 1024percent = recv_size / data_sizeprogress(percent, width=70)

六、json 和 pickle 模块:数据序列化

序列化是将内存中的对象转换为可存储或传输的格式的过程,反序列化则是其逆过程。

1. json 模块:跨平台数据交互

json 格式是一种轻量级的数据交换格式,被多种语言支持,适合跨平台数据传输。

import json# 序列化:将 Python 对象转换为 json 字符串
data = {'name': 'Alice', 'age': 20, 'is_student': True}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)# 反序列化:将 json 字符串转换为 Python 对象
data = json.loads(json_str)
print(data['name'])  # 输出:Alice

json 支持的数据类型与 Python 类型的对应关系如下:

Json 类型Python 类型
{}dict
[]list
"string"str
520.13int 或 float
true/falseTrue/False
nullNone

2. pickle 模块:Python 专属序列化

pickle 模块可序列化 Python 中所有数据类型(包括对象),但仅支持 Python 语言,不同版本的 Python 可能不兼容。

import pickle# 序列化:将 Python 对象写入文件
data = {'name': 'Bob', 'scores': [90, 85, 95]}
with open('data.pkl', 'wb') as f:pickle.dump(data, f)# 反序列化:从文件读取 Python 对象
with open('data.pkl', 'rb') as f:data = pickle.load(f)
print(data['scores'])  # 输出:[90, 85, 95]

七、hashlib 模块:哈希算法

hashlib 模块提供了多种哈希算法(如 MD5、SHA 系列),可将任意数据转换为固定长度的哈希值,常用于密码加密、数据校验等。

1. 基本使用(以 MD5 为例)

import hashlib# 创建 MD5 哈希对象
md5 = hashlib.md5()
# 更新哈希对象(传入 bytes 类型数据)
md5.update('hello world'.encode('utf-8'))
# 获取哈希值(十六进制字符串)
print(md5.hexdigest())  # 输出:5eb63bbbe01eeed093cb22bb8f5acdc3

2. 哈希值的特点

  • 输入相同,输出必相同。
  • 不可逆:无法从哈希值反推原始数据。
  • 固定长度:无论输入数据大小,哈希值长度固定。

八、shutil 模块:高级文件操作

shutil 模块提供了文件复制、移动、删除、压缩和解压等高级操作,功能比 os 模块更丰富。

1. 复制文件

import shutil# 复制文件内容(需打开文件对象)
with open('f1.txt', 'rb') as f1, open('f2.txt', 'wb') as f2:shutil.copyfileobj(f1, f2)# 直接通过文件名复制
shutil.copyfile('f1.txt', 'f3.txt')# 复制文件内容及权限
shutil.copy('f1.txt', 'f4.txt')# 复制文件内容及所有状态信息(权限、时间等)
shutil.copy2('f1.txt', 'f5.txt')

2. 移动文件

shutil.move('f1.txt', 'dir1/')  # 将文件移动到目录 dir1
shutil.move('f2.txt', 'f6.txt')  # 重命名文件

3. 压缩与解压

# 创建压缩文件(格式支持 zip、tar 等)
shutil.make_archive('archive', 'zip', root_dir='dir1')  # 将 dir1 目录压缩为 archive.zip# 解压文件
shutil.unpack_archive('archive.zip', extract_dir='dir2')  # 将 archive.zip 解压到 dir2

九、subprocess 模块:执行系统命令

subprocess 模块用于在 Python 中执行系统命令,并获取命令的输出结果。

import subprocess# 执行命令,获取输出
result = subprocess.Popen('ls -l',  # 要执行的命令(Linux 系统)shell=True,stdout=subprocess.PIPE,  # 命令成功时的输出管道stderr=subprocess.PIPE   # 命令失败时的错误管道
)# 读取输出(需解码)
stdout = result.stdout.read().decode('utf-8')
stderr = result.stderr.read().decode('utf-8')print('标准输出:', stdout)
print('错误输出:', stderr)

十、logging 模块:日志记录

logging 模块用于记录程序运行过程中的日志信息,便于调试和监控。

1. 日志级别

日志级别从低到高依次为:

  • DEBUG(10):调试信息
  • INFO(20):普通信息
  • WARNING(30):警告信息(默认级别)
  • ERROR(40):错误信息
  • CRITICAL(50):严重错误信息

2. 基本使用

import logging# 配置日志(输出到文件,指定格式和级别)
logging.basicConfig(filename='app.log',format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt='%Y-%m-%d %H:%M:%S',level=logging.DEBUG  # 记录 DEBUG 及以上级别的日志
)# 记录日志
logging.debug('调试信息')
logging.info('程序启动')
logging.warning('注意:内存不足')
logging.error('文件读取失败')
logging.critical('系统崩溃')

3. 高级配置

通过配置字典可实现更灵活的日志管理(如同时输出到文件和终端,设置不同格式):

import logging.configLOGGING_DIC = {'version': 1,'disable_existing_loggers': False,'formatters': {'standard': {'format': '[%(asctime)s][%(levelname)s] %(message)s'},},'handlers': {'console': {'level': 'DEBUG','class': 'logging.StreamHandler','formatter': 'standard'},'file': {'level': 'INFO','class': 'logging.FileHandler','filename': 'app.log','formatter': 'standard'}},'loggers': {'': {'handlers': ['console', 'file'],'level': 'DEBUG','propagate': False}}
}logging.config.dictConfig(LOGGING_DIC)
logger = logging.getLogger(__name__)
logger.debug('调试信息')  # 输出到终端
logger.info('程序启动')   # 输出到终端和文件

十一、re 模块:正则表达式

正则表达式是一种用于匹配字符串的模式,re 模块提供了正则表达式的支持。

1. 常用匹配模式

模式描述
\w匹配字母、数字及下划线
\W匹配非字母、数字及下划线
\s匹配任意空白字符(空格、换行、制表符等)
\S匹配任意非空白字符
\d匹配任意数字(0-9)
\D匹配任意非数字
.匹配任意字符(除换行符,指定 re.DOTALL 可包含换行符)
*匹配前面的表达式 0 次或多次(贪婪模式)
+匹配前面的表达式 1 次或多次(贪婪模式)
?匹配前面的表达式 0 次或 1 次;或用于非贪婪模式(如 .*?)
{n,m}匹配前面的表达式 n 到 m 次
[]匹配括号内的任意字符(如 [a-z] 匹配小写字母)
[^]匹配不在括号内的任意字符(如 [^0-9] 匹配非数字)
^匹配字符串开头
$匹配字符串结尾
()分组匹配

2. 常用方法

import re# findall:返回所有匹配结果的列表
print(re.findall(r'\d+', 'abc123def456'))  # 输出:['123', '456']# search:找到第一个匹配,返回匹配对象(通过 group() 获取结果)
match = re.search(r'\d+', 'abc123def456')
print(match.group())  # 输出:123# sub:替换匹配的字符串
print(re.sub(r'\d+', 'num', 'abc123def456'))  # 输出:'abcnumdefnum'# compile:编译正则表达式,提高复用效率
pattern = re.compile(r'\d+')
print(pattern.findall('abc123def456'))  # 输出:['123', '456']

http://www.dtcms.com/a/497046.html

相关文章:

  • 卫星授时原理
  • 2025时空低空经济发展现状与智能化趋势
  • 哪个网站推广做的好做网站素材在哪找
  • 荆州公司做网站多仓库版仓库管理网站建设源码
  • 哈尔滨餐饮网站建设外包公司的人好跳槽吗
  • 高中课程免费教学网站网络规划设计师知识点
  • 企业官方网站制作wordpress 3.8.1 exp 下载
  • 为什么做腾讯网站网站建设方案与报价
  • 网站建设教程特别棒湖南岚鸿权 威工业设计专业最好的大学世界排名
  • 2 网站内部链接优化网址大全
  • 3D Gaussian Splatting论文简要解读与可视化复现(基于gsplat)
  • 养老网站备案必须做前置审批吗天津电商网站建设
  • Spring Data Redis
  • 站长之家工具高清网站的百度推广怎么做
  • 深圳微信网站运营免费网站建站系统
  • 沈阳网站建设的公司西安网站推广排名
  • 购物网站有哪些平台百度网盘搜索引擎
  • 火币网(Huobi Pro)是否正规?是否存在安全漏洞?——深度解析
  • 第3章,[标签 Win32] :窗口类03,窗口过程函数字段
  • 软件开发网站开发公司工作组赴平凉事故现场
  • 友情链接如何选择网站工程招标信息网
  • 现在建设的网站有什么劣势网站建设公司盈利分析
  • 广西网站设计服务代码优化网站排名
  • django 网站开发视频杭州品牌网站建设
  • 白银市建设局网站首页包头微网站开发
  • 做网站维护是什么岗位浅谈你对大学校园网站建设的建议
  • seo整站优化建网站能干嘛
  • 企业网站推广建议考试报名费悦生活建设银行网站
  • 所得税 网站建设费北京网站建设公司华网制作作
  • Java核心概念:抽象类、接口、Object类深度剖析