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

你应该停止使用的 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 secretslength = 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 ZoneInfonyc = 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: strsurname: strpassword: bytesu = 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 tomllibwith open("pyproject.toml", "rb") as f:config = tomllib.load(f)print(config)

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

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

相关文章:

  • 通过Golang实现中间人攻击,查看和修改https流量包
  • Linux基础知识学习(五)
  • Go小技巧易错点100例(十七)
  • InputApc()函数是如何调用ProcessKeyboardInput()函数的?
  • MVC与三层架构分层
  • 用Golang实现图形面积计算
  • HiveSQL实战——大厂面试真题
  • 【JPCS出版】第三届机械、航天技术与材料应用国际学术会议 (MATMA 2024)
  • Go 语言协程管理精解
  • 解决 Go 语言并发问题
  • 我问GPT flutter
  • 2024年10月湖北省自学考试报名流程(5步)
  • LLM概念梳理(一):训练流程之PT、SFT和PO
  • OriginPro快速上手指南:数据可视化与分析的利器
  • Android笔试面试题AI答之Kotlin(18)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Apache Spark Streaming 使用实例
  • Cookie 在前端中的实践
  • cookie和session
  • CSS相对定位
  • echarts的各种常用效果展示
  • Git学习与使用心得(1)—— 初始化
  • input的行数自动增减
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • mysql 5.6 原生Online DDL解析
  • Otto开发初探——微服务依赖管理新利器
  • Redis中的lru算法实现
  • spring boot下thymeleaf全局静态变量配置
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 什么软件可以剪辑音乐?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 用jQuery怎么做到前后端分离
  • 找一份好的前端工作,起点很重要
  • 自制字幕遮挡器
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • # Java NIO(一)FileChannel
  • #《AI中文版》V3 第 1 章 概述
  • #define与typedef区别
  • #QT(一种朴素的计算器实现方法)
  • (1) caustics\
  • (二)Linux——Linux常用指令
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (数据结构)顺序表的定义
  • (一)RocketMQ初步认识
  • (转)Sql Server 保留几位小数的两种做法
  • (转)visual stdio 书签功能介绍
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET CLR Hosting 简介