你应该停止使用的 7 个已弃用的 Python 库

news2024/11/27 4:17:16

      欢迎来到雲闪世界。升级您的 Python 工具包:发现 7 个应停止使用的过时库以及替代它们的功能。最近,我回顾了 Python 的新特性,发现每个版本都引入了创新,使我们的日常开发工作变得更加轻松。

这让我意识到科技是一门永无止境的艺术,总是充满惊喜。这也提醒我要不断更新我的“工具包”,以免被新技术的浪潮抛在后面。

让我们来谈谈 Python 中的一些过时的方法以及如何拥抱这些新功能。

Pathlib 与 OS 模块

还记得使用 os.path 作为文件路径时的那些长字符串吗?那是一场噩梦。

自 Python 3.4 以来,pathlib 模块彻底改变了文件路径操作。

它就像一个金矿,使代码更加优雅和可读。

from pathlib import Path
import os.path

# Old way
two_dirs_up = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# New way, more readable
two_dirs_up = Path(__file__).resolve().parent.parent

使用新方法,路径将被视为对象,而不是字符串,从而允许通过对象属性直接操作。这是程序员的梦想。

例如,获取文件名,后缀,父目录等,可以简单地完成:

 
readme = Path("README.md").resolve()

print(f"Absolute path: {readme.absolute()}")  # Absolute path
print(f"File name: {readme.name}")            # File name
print(f"Path root: {readme.root}")            # Root path
print(f"Parent directory: {readme.parent}")   # Parent directory
print(f"File extension: {readme.suffix}")     # File suffix
print(f"Is it absolute: {readme.is_absolute()}")  # Is it an absolute path?

我最喜欢的功能是使用“/”运算符来连接路径:

 
etc = Path('/etc')

joined = etc / "cron.d" / "anacron"
print(f"Exists? - {joined.exists()}")  # Check if the path exists

路径操作变得像“切蛋糕”一样简单直观。旧的 os.path 模块现在已经远远落后于时代。

机密与 OS 模块

让我们来讨论一下 Python 3.6 中引入的 secrets 模块。

之前我们使用 os.urandom 来生成随机字节。然而,secret 更适合生成安全令牌,尤其是密码等敏感信息。

 
import secrets

length = 64
value = secrets.token_bytes(length)
print(f"Bytes: {value}")

value = secrets.token_hex(length)
print(f"Hex: {value}")

使用秘密的好处是它提供了许多生成随机数据的方法,并且是出于安全目的而设计的。

与随机模块不同,应使用秘密来生成密码以确保其安全。

Zoneinfo 与 pytz

在 Python 3.9 之前,我们依靠 pytz 库进行时区处理。

现在,Python 包含 zoneinfo 模块,简化了时区操作。

 
from datetime import datetime
from zoneinfo import ZoneInfo

nyc = ZoneInfo("America/New_York")
localized = datetime(2022, 6, 4, tzinfo=nyc)
print(f"Datetime: {localized}, Timezone: {localized.tzname()}, TZ Info: {localized.tzinfo}")

这对于处理时区来说是一个巨大的进步,但请记住,如果您的系统缺少时区数据,您仍然需要 tzdata 包。

数据类与命名元组

Python 3.7 引入了数据类,使得定义数据结构变得更加容易。

数据类可以替代命名元组,提供不可变对象、默认值和类型提示。

 
from dataclasses import dataclass

@dataclass
class User:
    name: str
    surname: str
    password: bytes

u = User("John", "Doe", b'secret')
print(u)

这不仅简化了代码,还提高了可读性。除非您创建了数百万个实例,否则性能差异很小。

毕竟程序员最大的敌人是拖延症,而不是执行效率。

正确记录与打印

有时我们会使用打印语句进行调试,但在生产环境中,使用日志记录模块是更好的选择。

 
import logging
logging.basicConfig(
    filename='application.log',
    level=logging.WARNING,
    format='[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s',
    datefmt='%H:%M:%S'
)

logging.error("A serious error occurred.")
logging.warning('This is a warning.')

日志记录有助于更好地记录信息,并允许设置日志级别、格式等,从而增强调试体验。

f 字符串与格式

我们多久使用一次 str.format() 来连接字符串?

自从 Python 3.6 引入 f 字符串以来,字符串连接变得非常简单。

 
name = "world"
print(f"Hello, {name}!")

但是,f 字符串并不总是最好的选择。对于动态模板,仍然需要 str.format()。

 
def func(tpl: str, param1: str, param2: str) -> str:
    return tpl.format(param1=param1, param2=param2)

some_template = "First template: {param1}, {param2}"
another_template = "Other template: {param1} and {param2}"
print(func(some_template, "Hello", "World"))
print(func(another_template, "Hello", "Python"))

f 字符串非常适合静态字符串,因此请根据您的需要在它们之间进行选择。

Tomlib 与 tomli

最后,我们来谈谈如何处理 TOML 配置文件。Python 3.11 引入了 tomllib,无需安装 tomli 库。

 
import tomllib

with open("pyproject.toml", "rb") as f:
    config = tomllib.load(f)
    print(config)

少一个依赖意味着少一些麻烦,特别是在多版本环境中。内置库总是能提供稳定感。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.21 QT

1.思维导图 2. 服务器端 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox> #include <QDebug> #include <QList> #include <QTcpSocket>QT_BEGIN_NAMESPACE names…

免费高画质提取PPT/Word/Excel中的图片工具

下载地址&#xff1a;https://pan.quark.cn/s/134ccc35b8a2 软件简介&#xff1a; 好不容易搞到一个几十上百MB的ppt&#xff0c;想导出里面的图片进行二次加工&#xff0c;却被ppt超低画质的图片另存为功能劝退&#xff0c;明知里面全是高清图片&#xff0c;走时却是两手空空…

【C++从练气到飞升】14---深入浅出继承

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承方式和访问限定符…

重新认识AbstractQueuedSynchronizer

开篇之前&#xff0c;烦请诸位允许我附庸风雅一次。近期因诸事繁杂&#xff0c;心情颇低落&#xff0c;遂于喜马拉雅APP中收听《老子》一文。其中的第八十一章《结天道》一文于我感悟颇深&#xff1a;和大怨&#xff0c;必有余怨&#xff0c;报怨以德&#xff0c;焉可以为善&am…

C++,std::bind 详解

文章目录 1. 概述2. 基本用法2.1 使用占位符2.2 示例 3. 总结 1. 概述 std::bind 是 C11 引入的一个功能&#xff0c;它允许你将函数&#xff08;或成员函数、函数对象&#xff09;与其参数绑定&#xff0c;生成一个新的可调用对象。这个功能在需要将函数及其参数一起传递给其…

DNF攻略:护石符文体系辅助详解,VMOS云手机助攻核心玩法!

在DNF游戏中&#xff0c;护石符文系统是提升角色实力的重要部分。当前版本中&#xff0c;护石符文体系经过了优化&#xff0c;使得获取方式更加便捷。以下是护石符文体系的详细介绍&#xff0c;以及如何使用VMOS云手机来更高效地管理和利用这一系统。 一、护石符文体系简介 护…

HarmonyOS 地图服务:深度解析其丰富功能与精准导航实力

目录 前期准备打造个性化地图&#xff1a;聚焦创建地图功能导入Map Kit相关模块通过MapOptions初始化地图切换地图类型设置地图中心点及层级展示定位按钮展示比例尺指定地图的日间夜间模式 通过MapComponentController对象方法控制地图切换地图类型开启3D建筑图层在指定的持续时…

【安当产品应用案例100集】008-UKEY在工业自动化数据传输中应用

工业自动化中的数据传输是确保生产过程高效、稳定运行的关键环节。工业自动化系统中&#xff0c;一般会有一个远程的客户端&#xff0c;负责将各个传感器、控制器等设备产生的信息传递到服务端&#xff0c;以实现生产过程的自动化控制和监控。它对于提高生产效率、降低生产成本…

SQL Server 2017上服务端设置强制加密启用SSL

在数据库服务端设置&#xff0c;强制所有客户端使用 SSL&#xff0c;设置完后&#xff0c;后续客户端所有连接&#xff0c;都将以密文传送&#xff0c;不论客户端是否指定安全连接&#xff08;即EncryptTrue/False&#xff09; 一、服务端强制加密使用 SSL 1.在数据库服务器上…

C++ 模板进阶知识

目录 一. 非类型模板参数 与类型模板参数确认的区别 何时确认 确认方式 二. 模板的特化 1. 概念 2. 函数模板特化 3. 类模板特化 3.1 全特化 3.2 偏特化 (1). 部分特化 (2). 进一步限制 4. 实际应用 三. 模板分离编译 1. 概念 2. 模板的分离编译 3. 解决方法 四…

【学习笔记】STM32F407探索者HAL库开发(一)STM32F4资源概要

【学习笔记】STM32F407探索者HAL库开发&#xff08;一&#xff09;STM32F4资源概要 1 硬件资源2 STM32命名规则3 STM32数据手册3.1 数据手册各章节内容概要3.2 引脚分布3.3 引脚定义3.4 引脚定义表的具体说明 1 硬件资源 STM32F407ZGT6具体的 内部资源如表 资源数量资源数量内…

鸿蒙Harmony实战开发:Touchscreen驱动器件硬件接口使用实例

功能简介 Touchscreen驱动用于驱动触摸屏使其正常工作&#xff0c;该驱动主要完成如下工作&#xff1a;对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态、注册中断、配置通信接口&#xff08;I2C或SPI&#xff09;、设定Input相关配置、下载及更新固件等操作。 在HDF&am…

考试:数据库系统(01)

数据库系统 ◆数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录。 数据的种类&#xff1a;文本、图形、图像、音频、视频、学生的档案记录、货物的运输 情况等。 ◆数据库DB: 是长期存储在计算机内、有组织的、可共享的大量数据的集合。 ◆数据库…

安恒信息总裁宋端智,辞职了!活捉一枚新鲜出炉的餐饮人!

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

雅菲奥朗 FinOps 认证培训:开启企业云财务管理转型之路

前言&#xff1a; 在当今快速变化的商业环境中&#xff0c;企业面临着前所未有的IT财务挑战。随着云计算和数字化转型的推进&#xff0c;传统的财务管理方式已经不能满足“企业上云”的需求。FinOps&#xff0c;即“云财务管理”应运而生&#xff0c;成为帮助企业实现IT财务流…

Compose TextField详解

首先明确Compose TextField的底层依赖是&#xff1a; TextField BasicTextField CoreTextField 相较于Text&#xff0c;TextField需要提供可输入的能力以及渲染效果动态更新的能力。 // CompositionLocals// If the text field is disabled or read-only, we should not d…

智能菜谱推荐系统_ct3p7

TOC springboot575智能菜谱推荐系统_ct3p7--论文 第一章 概述 1.1 研究背景 近些年&#xff0c;随着中国经济发展&#xff0c;人民的生活质量逐渐提高&#xff0c;对网络的依赖性越来越高&#xff0c;通过网络处理的事务越来越多。随着智能菜谱推荐管理的常态化&#xff0c…

F1 F4 Fn lock 指示灯不亮 联想笔记本 thinkpad

问题描述&#xff1a;F1 F4 Fn lock 指示灯开机的时候亮&#xff0c;但是使用的时候虽然能够发挥正常功能&#xff0c;但是指示灯一直熄灭&#xff0c;指示灯不亮。 电脑型号&#xff1a;联想笔记本 thinkpad E14 Gen 2 。本方案应该适用于所有联想电脑。 解决方法&#xff1a;…

嵌入式和单片机有什么区别?

目录 &#xff08;1&#xff09;什么是嵌入式&#xff1f; &#xff08;2&#xff09;什么是单片机&#xff1f; &#xff08;3&#xff09;嵌入式和单片机的共同点 &#xff08;4&#xff09;嵌入式和单片机的区别 &#xff08;1&#xff09;什么是嵌入式&#xff1f; 关…

掉毛不愁!浮毛怎么去掉比较干净?这宠物空气净化器用上真能解决

这阵子天气热得让人只想宅家&#xff0c;门窗紧闭&#xff0c;空调一开就是一整天。室内凉爽宜人&#xff0c;但一出门再回来&#xff0c;那满屋的浮毛和异味简直让人措手不及&#xff0c;仿佛从天堂跌入地狱。幸好&#xff0c;我家有台宠物空气净化器这位“救星”&#xff0c;…