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

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)

六、系统交互与监控:syspsutil

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模块提供了多种扩展数据结构,优化了内置容器(如dictlist)的性能和使用体验。

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)

十一、数据库操作:pymysqlsqlite3

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>:查看变量值。
http://www.xdnf.cn/news/755659.html

相关文章:

  • Redis-6.2.9 Sentinel 哨兵配置
  • WSL2 安装与Docker安装
  • 基于微信小程序的scratch学习系统
  • 图像数据如何表示为概率单纯形
  • Github 2025-06-01开源项目月报 Top20
  • 构建系统maven
  • 水系电池的“再登场”
  • 使用lighttpd和开发板进行交互
  • Node.js 全栈技术栈的开发者,Web3 面试题
  • 从架构视角设计统一网络请求体系 —— 基于 uni-app 的前后端通信模型
  • 如何使用 Docker 部署grafana和loki收集vllm日志?
  • IDEA常用快捷键
  • 6.1 数学复习笔记 23
  • Freefilesync配置windows与windows,windows与linux之间同步
  • LTSPICE仿真电路:(三十二)差动放大器电流源
  • openssl 怎么生成吊销列表
  • 【论文解读】DETR | End-to-End Object Detection with Transformers
  • 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
  • 多线程——线程池
  • Linux下目录递归拷贝的单进程实现
  • C++读写锁以及实现方式
  • 深入理解短链服务:原理、设计与实现全解析
  • 6级翻译学习
  • 蓝桥云课ROS学习C++教程cpp-geeksforgeeks版本
  • Vue-1-前端框架Vue基础入门之一
  • 6、在树莓派上安装 NTP(Network Time Protocol )服务的步骤
  • Linux --进程状态
  • 论文阅读笔记——Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
  • 《Python语言程序设计》2018 第4章第9题3重量和价钱的对比,利用第7章的概念来解答你
  • 广东WordPress开发公司及服务