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

      欢迎来到雲闪世界。升级您的 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.mfbz.cn/a/871559.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有了这4款工具,你就知道电脑怎么录屏了!

电脑屏幕录屏这个问题很多人都会碰到,比如教学视频录制,游戏技巧分享,软件操作演示等等。因为场景众多,电脑自带的录屏功能不一定能满足,所以借助第三方工具是一个很有效的办法。如果大家不知道如何录屏,可…

I2C学习:上拉电阻选取

一.I2C简介 I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。I2C总线在使用时,需要接上拉电阻,这是因为I2C接口是开漏输出,如图1所示。 图1 I2C开漏输出 I2C有5种速度模式:标准(100KHz&am…

在亚马逊云科技上安全、合规地创建AI大模型训练基础设施并开发AI应用服务

项目简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用Servi…

就业c++02 随处可见红黑树

通过key来比较节点插入哪个地方 一种key value 另一种顺序执行 比如查找小于50的数字在左面还是在右面 访问那个资源 他的次数是多少构建了 资源key 次数 value 海量的io 过来访问 知道哪一个io 就是key value查找 根据黑色高度的差异 红色节点和红色节点是不相邻的

Python数据分析:数据可视化(Matplotlib、Seaborn)

数据可视化是数据分析中不可或缺的一部分,通过将数据以图形的方式展示出来,可以更直观地理解数据的分布和趋势。在Python中,Matplotlib和Seaborn是两个非常流行和强大的数据可视化库。本文将详细介绍这两个库的使用方法,并附上一个…

OceanMind海睿思入选《2024中国企业数智化转型升级服务全景图/产业图谱》

近日,国内知名数据智能产业创新服务媒体数据猿携手上海大数据联盟发布了《2024中国企业数智化转型升级服务全景图/产业图谱1.0版》。中新赛克海睿思从数千家企业中脱颖而出,成功入选「底层技术服务 - 大数据」细分领域。 在历经数月的时间里,…

实现Bezier样条曲线

1.给出n1 个控制点pk(xk,yk,zk),这里k可取值0-n,多项式函数公式如下 获取的单个点的代码 void zmBezier::getPoint(float u, double p[3]) {int n m_count - 1;double x 0, y 0, z 0;for(int k 0; k < n; k){x m_ctrlPoints[k][0] * BEZ_k_n(n, k, u);y m_ctrlPoin…

《机器学习》—— 使用过采样方法实现逻辑回归分类问题

文章目录 一、什么是过采样方法&#xff1f;二、使用过采样方法实现逻辑回归分类问题三、过采样的优缺点 本篇内容是 基于Python的scikit-learn库中sklearn.linear_model 类中的 LogisticRegression&#xff08;&#xff09;逻辑回归方法实现的&#xff0c;其内容中只是在处理…

创建、使用、删除 数据库

一、创建数据库 1.1 使用DDL语句创建数据库 CREATE DATABASE 数据库名 CHARACTER SET 字符编码 COLLATE 排序规则; 如果不指定数据库编码&#xff0c;默认是utf8&#xff1b; 如果不指定排序规则&#xff0c;默认是utf8_general_ci&#xff0c;即不区分大小写&#xff0c;区分…

我“开发“了一款大模型应用,AI门槛这么低了吗?

现在国产大模型多如牛毛。虽然可选的大模型产品很多&#xff0c;但普遍存在同质化、高分低能、实用性差、专业性不足的问题&#xff0c;哪怕是诸如ChatGPT、Gemini这样全球顶尖的大模型也会存在这种情况。 还有一点比较重要的是&#xff0c;由于大模型需要算力、算法、数据的基…

vue+ckEditor5 复制粘贴wold文字+图片并保存格式

第一步在vue2项目下安装 npm install --save ckeditor/ckeditor5-build-decoupled-document 第二 项目下新建一个plugins的文件夹将这个包ckeditor5-build-classic放入 &#xff08;包在页面最上方 有个下载按钮 可以下载&#xff09; 刚开始时 ckeditor5-build-classic文件…

「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)

目录 概述 思路 核心概念&#xff1a;前缀函数 1.前缀函数 2.next数组 1.考研版本 2.竞赛版本 算法过程 构建next数组 匹配过程 复杂度 Code 概述 为什么大家总觉得KMP难&#xff1f;难的根本就不是这个算法本身。 在互联网上你可以见到八十种KMP算法的next数组…

SQL 布尔盲注 (injection 第六关)

简介 SQL注入&#xff08;SQL Injection&#xff09;是一种常见的网络攻击方式&#xff0c;通过向SQL查询中插入恶意的SQL代码&#xff0c;攻击者可以操控数据库&#xff0c;SQL注入是一种代码注入攻击&#xff0c;其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&am…

26.删除有序数组中的重复项---力扣

题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-duplicates-from-sorted-array/descript…

嵌入式学习——(Linux高级编程——线程)

线程 一、pthread 线程概述 pthread&#xff08;POSIX threads&#xff09;是一种用于在程序中实现多线程的编程接口。它与进程一样&#xff0c;可以用于实现并发执行任务&#xff0c;但与进程相比有一些不同的特点。 二、优点 1. 比多进程节省资源&#xff1a;进程在创建时…

PDPS软件 那智机器人 (丰田版)离线程序导出处理

在PDPS仿真软件中导出的那智机器人离线程序&#xff0c;一般是无法直接给TFD控制装置-那智机器人&#xff08;丰田式样版&#xff09;导入及识别使用。因此要对导出的程序进行转换编译处理&#xff0c;才能给TFD那智机器人&#xff08;丰田式样版&#xff09;导入离线程序。以下…

HarmonyOS 开发

环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…

类与对象(中(2))

开头 大家好啊&#xff0c;上一期内容我们介绍了类与对象中六大默认成员函数中的两种--->构造函数与析构函数&#xff0c;相信大家多少都形成了自己的独到见解。那么今天&#xff0c;我将继续就拷贝构造函数与运算符重载函数来展开讲解&#xff0c;话不多说&#xff0c;我们…

Python版《超级玛丽+源码》-Python制作超级玛丽游戏

小时候最喜欢玩的小游戏就是超级玛丽了&#xff0c;有刺激有又技巧&#xff0c;通关真的很难&#xff0c;救下小公主还被抓走了&#xff0c;唉&#xff0c;心累&#xff0c;最后还是硬着头皮继续闯&#xff0c;终于要通关了&#xff0c;之后再玩还是没有那么容易&#xff0c;哈…