Python进阶与常用库:探索高效编程的奥秘
一、文件与目录操作:os
模块
os
模块是Python标准库中用于与操作系统交互的核心工具,提供了丰富的文件和目录操作方法。通过os
,开发者可以轻松实现文件路径处理、环境变量获取、目录管理等功能。
1.1 核心功能与方法
以下是os
模块中常用的方法及其功能:
-
路径操作:
os.path.abspath(path)
:返回给定路径的绝对路径。例如,os.path.abspath('.')
可以获取当前工作目录的完整路径。os.path.exists(path)
:检查路径是否存在,返回布尔值。os.path.isfile(path)
和os.path.isdir(path)
:分别判断路径是否为文件或目录。os.path.join(*paths)
:拼接路径,自动适配不同操作系统的路径分隔符,例如os.path.join("just", "do", "python")
生成just/do/python
(Linux)或just\do\python
(Windows)。
-
文件属性:
os.path.getatime(path)
、os.path.getmtime(path)
、os.path.getctime(path)
:分别返回文件的最后访问时间、修改时间和创建时间(时间戳格式)。os.path.getsize(path)
:获取文件大小(字节为单位)。
-
目录与文件管理:
os.mkdir(dirname)
:创建目录,目录已存在时会抛出异常。os.rmdir(dirname)
:删除空目录。os.listdir(path)
:列出指定目录下的所有文件和子目录。os.rename(src, dst)
:重命名文件或目录。os.remove(path)
:删除文件。
-
系统交互:
os.system(command)
:执行系统命令,如os.system('pwd')
在Linux中打印当前工作目录。os.getcwd()
:获取当前工作目录路径。os.environ
:获取系统环境变量,如os.environ['PATH']
。
1.2 应用示例:批量重命名文件
假设你有一个目录,包含多个文件,需要将所有.txt
文件重命名为.bak
后缀。以下是一个使用os
模块的实现:
import osdef rename_txt_to_bak(directory):for filename in os.listdir(directory):if filename.endswith('.txt'):old_path = os.path.join(directory, filename)new_path = os.path.join(directory, filename.replace('.txt', '.bak'))os.rename(old_path, new_path)print(f'Renamed: {old_path} -> {new_path}')# 示例调用
rename_txt_to_bak('./my_folder')
这个脚本通过os.listdir
遍历目录,检查文件后缀并使用os.rename
进行重命名,展示了os
模块在文件管理中的强大能力。
二、数据加密与哈希:hashlib
模块
hashlib
模块提供了多种哈希算法(如MD5、SHA1、SHA256),用于数据加密、校验和安全验证。哈希算法将任意长度的数据映射为固定长度的摘要,常用于文件完整性校验、密码存储等场景。
2.1 常用哈希算法
- MD5:快速但安全性较低,适用于文件校验。
- SHA1:比MD5更安全,但仍不推荐用于高安全场景。
- SHA256:更安全的算法,广泛用于现代应用。
2.2 示例:计算字符串和文件的哈希值
以下代码展示如何使用hashlib
计算字符串和文件的MD5值:
import hashlib# 计算字符串MD5
text = "hello".encode('utf-8')
md5_hash = hashlib.md5(text).hexdigest()
print(f"MD5 of 'hello': {md5_hash}")# 计算文件MD5
def get_file_md5(filename):md5 = hashlib.md5()with open(filename, 'rb') as f:md5.update(f.read())return md5.hexdigest()print(f"MD5 of 'example.txt': {get_file_md5('example.txt')}")
2.3 应用场景
- 文件完整性校验:在文件传输后,比较文件的MD5值以确保未被篡改。
- 密码存储:将用户密码哈希后存储,避免明文泄露(建议结合盐值和更安全的算法如bcrypt)。
三、数据编码:base64
模块
base64
模块用于将二进制数据编码为可打印的ASCII字符,常用于数据传输(如邮件附件)或存储。base64
编码将二进制数据转换为由64个字符(A-Z、a-z、0-9、+、/)组成的字符串。
3.1 示例:编码与解码
import base64# 编码
data = b'hello'
encoded = base64.b64encode(data)
print(f"Encoded: {encoded.decode()}") # 输出:aGVsbG8=# 解码
decoded = base64.b64decode(encoded)
print(f"Decoded: {decoded.decode()}") # 输出:hello
3.2 应用场景
- 邮件附件:将图片或文件编码为Base64后嵌入邮件。
- API数据传输:在JSON中传输二进制数据时,使用Base64编码。
四、日志记录:logging
模块
logging
模块是Python标准库中用于日志记录的强大工具,支持灵活的日志输出(控制台、文件等)和多种日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)。
4.1 基本用法
以下是一个简单的日志记录示例:
import logging# 配置日志
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',filename='app.log',filemode='a'
)# 记录不同级别的日志
logging.debug('Debug message')
logging.info('Info message')
logging.warning('Warning message')
logging.error('Error message')
logging.critical('Critical message')
4.2 彩色日志:结合colorlog
通过colorlog
库,可以为控制台日志添加颜色,提升可读性:
import logging
import colorlog# 创建日志器
logger = logging.getLogger('my_app')
logger.setLevel(logging.DEBUG)# 创建控制台处理器
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)# 设置彩色格式
formatter = colorlog.ColoredFormatter("%(log_color)s%(levelname)s:%(name)s:%(message)s",log_colors=colorlog.default_log_colors
)
handler.setFormatter(formatter)
logger.addHandler(handler)# 测试日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')
4.3 应用场景
- 调试与监控:记录程序运行状态,便于排查问题。
- 生产环境:将日志写入文件,用于事后分析。
五、装饰器:增强函数功能
装饰器是Python中用于扩展函数行为的强大工具,允许在不修改原函数代码的情况下添加新功能。装饰器常用于日志记录、权限验证、性能分析等场景。
5.1 简单装饰器示例
以下是一个用于记录函数执行时间的装饰器:
import time
from functools import wrapsdef timing_decorator(func):@wraps(func)def wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)end = time.time()print(f"{func.__name__} took {end - start:.2f} seconds")return resultreturn wrapper@timing_decorator
def slow_function(x, y):time.sleep(2)return x + yprint(slow_function(10, 20)) # 输出执行时间和结果
5.2 复杂示例:权限验证与日志记录
以下是一个结合权限验证和操作日志记录的装饰器示例:
from functools import wraps
from datetime import datetime# 模拟用户数据库
users_db = {1: {"username": "zhangsan", "password": "zhangsan", "role": "admin"},2: {"username": "lisi", "password": "lisi", "role": "user"}
}# 操作日志
operation_logs = []# 权限验证装饰器
def require_admin(func):@wraps(func)def wrapper(user_id, *args, **kwargs):if users_db.get(user_id, {}).get("role") != "admin":print("Unauthorized access")return {"error": "Unauthorized access"}return func(user_id, *args, **kwargs)return wrapper# 日志记录装饰器
def log_operation(func):@wraps(func)def wrapper(user_id, *args, **kwargs):result = func(user_id, *args, **kwargs)action_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")log_entry = {"user_id": user_id,"action_time": action_time,"action": f"Called {func.__name__} with args {args}, kwargs {kwargs}"}operation_logs.append(log_entry)print("Logged operation")return resultreturn wrapper@require_admin
@log_operation
def edit_user_info(user_id, new_email, new_username, new_password):print(f"Editing user {new_username} with email {new_email}")return {"status": "success"}# 测试
print(edit_user_info(1, "new@admin.com", "newuser", "newpass")) # 成功
print(edit_user_info(2, "new@admin.com", "newuser", "newpass")) # 无权限
print(operation_logs)
六、系统交互与监控:sys
和psutil
6.1 sys
模块
sys
模块提供了与Python解释器交互的功能,适用于获取系统信息或控制程序行为。
- 常用功能:
sys.argv
:获取命令行参数,sys.argv[0]
为脚本路径。sys.version
:获取Python解释器版本。sys.exit()
:中断程序执行。
示例:获取命令行参数
import sysprint(f"Script name: {sys.argv[0]}")
if len(sys.argv) > 1:print(f"Arguments: {sys.argv[1:]}")
6.2 psutil
模块
psutil
是一个跨平台的系统监控库,可获取CPU、内存、磁盘、网络等信息,适用于性能分析和进程管理。
- 安装:
pip install psutil
- 功能:监控系统资源、进程管理(如
psutil.cpu_percent()
、psutil.Process().memory_info()
)。
示例:监控CPU使用率
import psutilprint(f"CPU Usage: {psutil.cpu_percent(interval=1)}%")
print(f"Memory Usage: {psutil.virtual_memory().percent}%")
七、时间处理:time
模块
time
模块用于处理时间相关操作,如获取时间戳、格式化日期等。
7.1 常用功能
time.time()
:返回当前时间戳。time.strftime(format, time_tuple)
:格式化时间,如%Y-%m-%d %H:%M:%S
。time.mktime(time_tuple)
:将格式化时间转换为时间戳。
示例:时间格式化
import time# 当前时间
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))# 时间戳转格式化时间
timestamp = time.time()
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp)))
八、邮件发送:smtplib
模块
smtplib
模块用于发送邮件,支持SMTP协议。结合email
模块,可以构造复杂的邮件内容。
8.1 示例:发送简单邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header# 邮件服务器配置
mail_host = "smtp.163.com"
mail_user = "your_email@163.com"
mail_pass = "your_password"
sender = "your_email@163.com"
receivers = ["recipient@admin.com"]# 创建邮件
message = MIMEText("Hello, this is a test email!", "plain", "utf-8")
message["From"] = Header("Python Bot", "utf-8")
message["To"] = Header("User", "utf-8")
message["Subject"] = Header("Test Email", "utf-8")# 发送邮件
try:smtp_obj = smtplib.SMTP()smtp_obj.connect(mail_host, 25)smtp_obj.login(mail_user, mail_pass)smtp_obj.sendmail(sender, receivers, message.as_string())print("Email sent successfully")
except smtplib.SMTPException as e:print(f"Error: {e}")
九、高效数据结构:collections
模块
collections
模块提供了多种扩展数据结构,优化了内置容器(如dict
、list
)的性能和使用体验。
9.1 常用数据结构
- namedtuple:创建带有命名字段的元组,便于访问。
- deque:双端队列,支持高效的头尾操作。
- Counter:统计元素出现次数。
- defaultdict:为不存在的键提供默认值。
- ChainMap:链式合并多个字典。
示例:使用Counter
统计字符频率
from collections import Countertext = "aaadminad67uyghijknm"
counter = Counter(text)
print(counter) # 输出:Counter({'a': 4, 'd': 3, ...})
print(counter.most_common(2)) # 输出:[('a', 4), ('d', 3)]
十、终端美化:rich
模块
rich
是一个强大的终端美化库,支持彩色文本、表格、进度条和Markdown渲染。
- 安装:
pip install rich
- 功能:彩色输出、表格、进度条、Markdown渲染等。
示例:创建进度条
from rich.progress import Progress
import timewith Progress() as progress:task = progress.add_task("Downloading...", total=100)for _ in range(100):progress.update(task, advance=1)time.sleep(0.1)
十一、数据库操作:pymysql
与sqlite3
11.1 MySQL操作:pymysql
pymysql
是Python操作MySQL数据库的常用库。
示例:创建表并插入数据
import pymysqldb = pymysql.connect(host='localhost', user='root', password='', database='python', port=3306)
cursor = db.cursor()# 创建表
cursor.execute("DROP TABLE IF EXISTS users")
cursor.execute("""CREATE TABLE users (id INT NOT NULL,username CHAR(20),pwd CHAR(255))
""")# 插入数据
cursor.execute("INSERT INTO users (id, username, pwd) VALUES (111, 'zhangsan', 'zhangsan')")
db.commit()
db.close()
11.2 SQLite操作:sqlite3
sqlite3
是Python内置的轻量级数据库模块,适合小型项目。
示例:创建表并查询数据
import sqlite3conn = sqlite3.connect('test.db')
cursor = conn.cursor()# 创建表
cursor.execute("DROP TABLE IF EXISTS users")
cursor.execute("""CREATE TABLE users (id INT NOT NULL,username CHAR(20),pwd CHAR(255))
""")# 插入数据
cursor.execute("INSERT INTO users (id, username, pwd) VALUES (111, 'zhangsan', 'zhangsan')")
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():print(row)
conn.close()
十二、调试利器:pdb
模块
pdb
是Python内置的调试工具,支持交互式调试、断点管理等。
12.1 调试方法
- 代码内调试:在代码中插入
pdb.set_trace()
。 - 命令行调试:运行
python -m pdb script.py
。 - 异常调试:捕获异常后调用
pdb.post_mortem()
。
示例:设置断点调试
import pdbdef add(a, b):pdb.set_trace() # 设置断点return a + bprint(add(1, 2))
12.2 常用命令
n
:执行下一行。s
:步入函数。c
:继续执行到下一个断点。b <line>
:设置断点。p <variable>
:查看变量值。
相关文章:
Python进阶与常用库:探索高效编程的奥秘
一、文件与目录操作:os模块 os模块是Python标准库中用于与操作系统交互的核心工具,提供了丰富的文件和目录操作方法。通过os,开发者可以轻松实现文件路径处理、环境变量获取、目录管理等功能。 1.1 核心功能与方法 以下是os模块中常用的方…...
nt!MiDispatchFault函数分析之nt!MiCompleteProtoPteFault函数的作用
nt!MiDispatchFault函数分析之nt!MiCompleteProtoPteFault函数的作用 第一部分: // // PTE is still in transition state, same protection, etc. // ASSERT (Pfn1->u4.InPageError 0); if (Pfn1->u2.ShareCount 0) { MI_REMO…...

YOLOX 的动态标签分类(如 SimOTA)与 Anchor-free 机制解析2025.5.29
YOLOX 的动态标签分类(如 SimOTA)与 Anchor-free 机制是其核心改进中的两个关键部分,它们在目标检测中的作用和实现方式存在显著差异。以下从原理、实现细节及效果三个方面进行详细对比: 一、核心原理与目标 1. Anchor-free 机制…...
打卡day42
DAY 42 Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 1、回调函数 回调函数(Callback Function)是一种特殊的函数,它作为参数传递给另一个函数&am…...
小白的进阶之路系列之八----人工智能从初步到精通pytorch综合运用的讲解第一部分
PyTorch Tensors 通过大量实例学习编程应用是最有效的方法。 本篇是PyTorch综合运用,旨在让读者通过一行行代码亲自掌握Pytorch工具包的各种功能,有利于大家部署自己的神经网络人工智能计算工程。 首先,载入torch库。 import torch我们来看看一些基本的张量操作。首先,…...

724.寻找数组的中心下标前缀和
题目链接: https://leetcode.cn/problems/find-pivot-index/ 这道题目我们可以使用暴力解法,就一个下标前数组之和,再求一个下标后数组之和,时间复杂度达到n方,我们来写一下: int pivotIndex(vector<in…...

软考-系统架构设计师-第十六章 层次式架构设计理论与实践
层次式架构设计理论与实践 16.2 表现层框架设计16.3 中间层框架设计16.4 数据访问层设计16.5 数据架构规划与设计16.6 物联网层次架构设计 软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及…...
甘特图 dhtmlxGantt.js UA实例
摘要:本文介绍了一个基于AngularJS的排产资源占用甘特图系统,包含前端界面展示和后端控制逻辑。系统通过HTML模板实现甘特图展示区域、查询条件表单和数据绑定,使用JavaScript控制器处理数据查询、甘特图初始化和交互逻辑。主要功能包括&…...

Docker学习笔记:基础知识
本文是自己的学习笔记 1、什么是Docker2、Docker的架构设计2.1、镜像(Image)2.2、容器(Container)2.3、仓库(Repository)2.4、Docker使用场景案例 1、什么是Docker Docker是基于Go语言实现的云开源项目。它的角色是作…...

5.2 初识Spark Streaming
在本节实战中,我们初步探索了Spark Streaming,它是Spark的流式数据处理子框架,具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理,并通过两个案例演示了如何利用Spark Streaming实现词频统计。…...
uv:一个现代化的 Python 依赖管理工具
在 Python 的生态系统中,依赖管理和 Python 版本管理一直是开发者关注的核心问题。传统的工具如 pip、poetry 和 pyenv 虽然功能强大,但在性能和使用体验上仍有改进空间。uv 是由 Python 核心开发者开发的 现代化依赖管理工具,旨在提供更快、…...

Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、为什么要做词云?让文字"活"起来!二、核心…...

理解解释器架构:原理、组成与运行机制全解析
目录 前言1. 什么是解释器架构2. 解释器的基本组成2.1 被解释执行的程序2.2 解释器引擎2.3 解释器内部状态2.4 程序执行的当前状态2.5 存储器模型 3. 解释器的工作原理3.1 解析源代码3.2 初始化运行环境3.3 逐条执行语法结构3.4 维护程序状态3.5 内存管理与变量作用域 4. 举例&…...

2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
华为OD全流程解析,备考攻略 快捷目录 华为OD全流程解析,备考攻略一、什么是华为OD?二、什么是华为OD机试?三、华为OD面试流程四、华为OD薪资待遇及职级体系五、ABCDE卷类型及特点六、题型与考点七、机试备考策略八、薪资与转正九、…...
Python应用for循环临时变量作用域
大家好!如果你刚开始学习Python,可能会对for循环中临时变量的作用域感到好奇。下面通过一个简单的练习,帮助你理解这个概念。 代码呈现: i 0 for i in range(5):print(i)print(i)代码介绍: 首先我们初始化变量i 0然后进入for循环,这里i成为…...

设计模式——桥接设计模式(结构型)
摘要 桥接设计模式是一种结构型设计模式,用于将抽象与实现解耦,使二者可以独立变化。它通过将一个类拆分为“抽象”和“实现”两部分,并通过桥接关系组合,避免了类继承层次结构过于庞大。桥接模式包含抽象类、扩充抽象类、实现类…...

LLaDa——基于 Diffusion 的大语言模型 打平 LLama 3
这里分享一篇文章《Large Language Diffusion Models》,来自人民大学高领人工智能学院,一篇尝试改变传统自回归范(预测下一个token) LLM 架构,探索扩散模型在 LLM 上的作用,通过随机掩码-预测逆向思维&…...
Apache SeaTunnel部署技术详解:模式选择、技巧与最佳实践
Apache SeaTunnel(原Waterdrop)作为高性能、分布式数据集成平台,支持海量数据的离线与实时同步。其灵活多样的部署模式可适配不同规模的生产环境需求。本文将系统解析SeaTunnel的部署架构、技术要点及最佳实践,帮助用户高效构建稳…...

2. 数据结构基本概念 (2)
本文部分ppt、视频截图来自:[青岛大学-王卓老师的个人空间-王卓老师个人主页-哔哩哔哩视频] 1. 数据结构基本概念 1.1 数据类型和抽象数据类型 (1) 数据类型(Data Type) 概念 数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。 在使用…...
鸿蒙5.0+ 多协议设备发现与分布式软总线技术实践
一、技术演进与架构升级 1.1 多协议发现机制演进 鸿蒙5.0重构设备发现层,支持三模异构发现: 经典蓝牙(BLE 5.2):低功耗设备发现Wi-Fi Aware:高带宽设备预连接PLC࿰…...

STM32F407寄存器操作(多通道单ADC+DMA)
1.前言 又是半年没更新了,趁着端午放假有点时间,并且最近项目要用这块知识,我就顺带研究一下ADC吧。 一般来说ADC主要用法包含了1.单通道软件触发(这是最简单和最常用的用法)2.单通道多次采集(需要快速采…...

基于React和TypeScript的金融市场模拟器开发与模式分析
基于React和TypeScript的金融市场模拟器开发与模式分析 项目概述 本项目开发了一个基于React和TypeScript的金融市场模拟器,通过模拟订单流和价格发现机制,重现了真实市场的动态特性。该模拟器不仅提供了实时价格图表、订单簿和交易功能,还…...
剑指offer13_剪绳子
剪绳子 给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n都是整数,2≤n≤58 并且 m≥2)。 每段的绳子的长度记为 k[1]、k[2]、……、k[m]。 k[1]k[2]…k[m] 可能的最大乘积是多少? 例如当绳子的长度是 8 时࿰…...

reverse_ssh 建立反向 SSH 连接指南 混淆AV [好东西哟]
目录 🌐 工具简介 ⚙️ 前提条件 攻击主机 (Linux) 目标主机 (Windows) 📋 详细步骤 步骤 1:安装 Go 环境 步骤 2:安装必要依赖 步骤 3:下载并编译 reverse_ssh 步骤 4:配置密钥 步骤 5ÿ…...
vue+elementUi+axios实现分页(MyBatis、Servlet)
vueelementUiaxios实现分页 文章目录 vueelementUiaxios实现分页1.代码实现【HTML】**【Servlet层】****【Service层】****【Dao层】** 2.总结步骤3.实现要点4.注意事项4.注意事项 注:此项目 前端为 html、 后端采用 mybatis、servlet实现 1.代码实现 【HTML】…...
WebBuilder数据库:企业数据管理的能力引擎
在数据成为核心生产要素的时代,企业对数据库的需求早已超越“存储与查询”的基础功能,转而追求高性能、高安全、高兼容与高效开发的综合能力。WebBuilder作为企业级快速开发平台的佼佼者,其数据库能力正式破解数据管理难题的关键钥匙。本文将…...
QtWidgets,QtCore,QtGui
目录 三者的关系示例代码主要功能模块QtCore**一、核心功能与常用类****1. 信号与槽机制(Signals and Slots)****2. 事件处理(Event Handling)****3. 定时器(Timers)****4. 线程(Threading)****5. 文件与目录操作****6. 属性系统(Property System)****二、高级特性**…...

lvs-keepalived高可用群集
目录 1.Keepalived 概述及安装 1.1 Keepalived 的热备方式 1.2 keepalived的安装与服务控制 (1)安装keep alived (2)控制 Keepalived 服务DNF 安装 keepalived 后,执行以下命令将keepalived 服务设置为开机启动。 2.使用 Keepalived 实现双机热备 …...
【Elasticsearch】suggest
在Elasticsearch中,suggest 是一个非常强大的功能,用于实现自动补全、拼写纠错和模糊搜索等功能。它可以帮助用户更快地找到他们想要的内容,同时提升搜索体验。以下是关于 suggest 的详细使用方法和常见场景。 1\. Suggest 的基本概念 sugges…...

高速收发器
一、高速收发器 1.FPGA高速收发器:GTP,GTX,GTH,GTZ 2.每个Quad有4对高速收发器GT(4个TX和4个RX)和一个COmmon 3.走差分,提高抗干扰性 4.CPLL是每个lane私有的,QPLL是整个Quad的所有通道共享的 5.每个MGT的bank有两对差分参考时钟 6.CPLL的时钟…...