Maison  >  Article  >  développement back-end  >  J'ai à nouveau sept bibliothèques Python super puissantes

J'ai à nouveau sept bibliothèques Python super puissantes

王林
王林avant
2023-04-11 22:10:101668parcourir

​Il y a un proverbe : "Il n'est pas nécessaire de réinventer la roue." Les bibliothèques Python en sont le meilleur exemple. Il vous aide à écrire de manière simple des fonctionnalités complexes et chronophages. Autant que je sache, un bon projet utilise certaines des meilleures bibliothèques.

1. PySnooper

Nous écrivons une fonction qui convertit un nombre en binaire en renvoyant une liste de bits. @pysnooper.snoop() peut être étudié en ajoutant un décorateur :

import pysnooper

@pysnooper.snoop()
def number_to_bits(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]

number_to_bits(6)

Alternativement, si vous ne souhaitez pas tracer l'intégralité de la fonction, vous pouvez envelopper les parties pertinentes dans un bloc with :

import pysnooper
import random

def foo():
lst = []
for i in range(10):
lst.append(random.randrange(1, 1000))

with pysnooper.snoop():
lower = min(lst)
upper = max(lst)
mid = (lower + upper) / 2
print(lower, mid, upper)

foo()

Le résultat est le suivant :

New var:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line10 
lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line11 
upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line12 
mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line13 
print(lower, mid, upper)
Elapsed time: 00:00:00.000344

En tant que développeur, la plupart du temps est consacré au débogage. Cette bibliothèque est un débogueur. La plupart des gens utilisent des lignes d'impression à des endroits stratégiques, dont certaines affichent la valeur d'une variable. Cette bibliothèque fait la même chose, sauf qu'au lieu de créer les bonnes lignes d'impression, vous ajoutez simplement une ligne de décorateurs aux fonctions qui vous intéressent. Vous obtiendrez un journal textuel de la fonction, indiquant quelles lignes ont été exécutées, quand et quand les variables locales ont été modifiées. Il compte plus de 15 000 étoiles sur GitHub.

Adresse du projet : https://github.com/cool-RR/PySnooper

2 Calendrier

Planification des tâches Python humain. Exécutez périodiquement une fonction Python (ou toute autre fonction appelable) en utilisant une syntaxe conviviale.

  • Une API simple et facile à utiliser pour planifier des tâches, conçue pour les humains.
  • Planificateur en cours pour les tâches périodiques. Aucun processus supplémentaire requis !
  • Très léger et sans dépendances externes.
  • Excellente couverture des tests.
  • Testable sur Python et 3.6, 3.7, 3.8, 3.9
import schedule
import time

def job():
print("I'm working...")

schedule.every(10).seconds.do(job)
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().day.at("12:42", "Europe/Amsterdam").do(job)
schedule.every().minute.at(":17").do(job)

def job_with_argument(name):
print(f"I am {name}")

schedule.every(10).seconds.do(job_with_argument, name="Peter")

while True:
schedule.run_pending()
time.sleep(1)

Il s'agit d'une bibliothèque de planification de tâches Python pour les humains. Il vous permet d'exécuter périodiquement une fonction Python (ou tout autre appelable) en utilisant une syntaxe conviviale. Il comprend de nombreuses fonctionnalités telles qu'un planificateur in-process qui fonctionne périodiquement (aucun processus supplémentaire requis), est très léger, n'a pas de dépendances externes, a une bonne couverture de tests, etc. Cette bibliothèque compte plus de 10 000 étoiles sur GitHub.

Adresse du projet : https://github.com/dbader/schedule

3 MechanicalSoup

"""Example usage of MechanicalSoup to get the results from the Qwant
search engine.
"""

import re
import mechanicalsoup
import html
import urllib.parse

# Connect to Qwant
browser = mechanicalsoup.StatefulBrowser(user_agent='MechanicalSoup')
browser.open("https://lite.qwant.com/")

# Fill-in the search form
browser.select_form('#search-form')
browser["q"] = "MechanicalSoup"
browser.submit_selected()

# Display the results
for link in browser.page.select('.result a'):
# Qwant shows redirection links, not the actual URL, so extract
# the actual URL from the redirect link:
href = link.attrs['href']
m = re.match(r"^/redirect/[^/]*/(.*)$", href)
if m:
href = urllib.parse.unquote(m.group(1))
print(link.text, '->', href)

Cette bibliothèque vous aidera à réaliser une interaction automatique avec le site Web. Il stocke et envoie automatiquement des cookies, suit les redirections et peut suivre des liens et soumettre des formulaires. Il ne fait pas Javascript. Cette bibliothèque compte plus de 4 000 étoiles sur GitHub.

Adresse du projet : https://github.com/MechanicalSoup/MechanicalSoup

4 ftfy

>>> from ftfy import fix_encoding
>>> print(fix_encoding("(ง'⌣')ง"))
(ง'⌣')ง

Ce qu'il peut faire

Voici quelques exemples de ce que ftfy peut faire (trouvé dans le monde réel) :

ftfy peut corriger mojibake (obscurcissement de l'encodage) en détectant des modèles de caractères qui sont évidemment UTF-8 mais qui sont décodés en d'autres caractères :

>>> import ftfy
>>> ftfy.fix_text('✔ No problems')
'✔ No problems'

Cela semble-t-il impossible ? Pas vraiment. UTF-8 est un codage bien conçu qui est évident lorsqu'il est utilisé à mauvais escient, et une chaîne de mojibake contient généralement toutes les informations dont nous avons besoin pour récupérer la chaîne d'origine.

ftfy peut corriger plusieurs couches de mojibake en même temps :

>>> ftfy.fix_text('The Mona Lisa doesn’t have eyebrows.')
"The Mona Lisa doesn't have eyebrows."

Il peut corriger le mojibake avec des "guillemets bouclés" appliqués ci-dessus, qui ne peuvent pas être décodés en continu avant que les guillemets ne soient développés :

>>> ftfy.fix_text("l’humanité")
"l'humanité"

ftfy peut corriger le mojibake contenant des caractères U +A0 (espace insécable) de mojibake, mais U+A0 devient un espace ASCII, qui est ensuite combiné avec un autre espace :

>>> ftfy.fix_text('Ãxa0 perturber la réflexion')
'à perturber la réflexion'
>>> ftfy.fix_text('à perturber la réflexion')
'à perturber la réflexion'

ftfy peut également décoder les entités HTML qui apparaissent en dehors du HTML, même lorsque l'entité est mal majuscule :

>>> # by the HTML 5 standard, only 'PÉREZ' is acceptable
>>> ftfy.fix_text('PÉREZ')
'PÉREZ'

Ces correctifs ne fonctionneront pas dans tous les cas, car ftfy a pour objectif ferme d'éviter les faux positifs - il ne devrait jamais remplacer le texte correctement décodé par autre chose.

Le texte suivant peut être codé en Windows-1252 et décodé en UTF-8 et sera décodé comme "MARQUɅ". Toutefois, le texte original est clair et ne sera donc pas modifié.

>>> ftfy.fix_text('IL Y MARQUÉ…')
'IL Y MARQUÉ…'

Cette bibliothèque vous aidera à réparer Unicode qui est cassé de diverses manières. Le but de cette bibliothèque est de recevoir un mauvais Unicode et de générer un bon Unicode à utiliser dans votre code compatible Unicode. Il a plus de 3 000 étoiles sur GitHub.

项目地址:https://github.com/rspeer/python-ftfy

5. rpyc

Jai à nouveau sept bibliothèques Python super puissantes

这是一个透明的python库,用于对称的远程过程调用、集群和分布式计算。它利用对象代理这一技术,利用python的动态特性,克服进程和计算机之间的物理界限,使远程对象可以像本地一样被操作。这个库在GitHub上有超过1k颗星。

项目地址:https://github.com/tomerfiliba-org/rpyc

6. pyglet

pyglet 的一些特性是:

  • 没有外部依赖项或安装要求。对于大多数应用程序和游戏需求,pyglet 除了 Python 之外不需要其他任何东西,简化了分发和安装。使用 PyInstaller 等冷冻机可以轻松打包您的项目。
  • 利用多窗口和多显示器桌面。pyglet允许你使用多个平台原生窗口,并且完全了解用于全屏游戏的多显示器设置。
  • 加载几乎任何格式的图像、声音、音乐和视频。pyglet可以选择使用 FFmpeg 播放音频格式,如 MP3、OGG/Vorbis 和 WMA,以及视频格式,如 MPEG2、H.264、H.265、WMV 和 Xvid。如果没有 FFmpeg,pyglet包含对 wav、png、bmp 等标准格式的内置支持。
  • pyglet 完全用纯 Python 编写,并利用ctypes模块与系统库进行交互。你可以修改代码库或做出贡献,而无需任何第二语言编译步骤或编译器设置。尽管是纯 Python,但pyglet具有出色的性能,这要归功于用于绘制数千个对象的高级批处理。
  • pyglet 是在 BSD 开源许可证下提供的,允许你将它用于商业和其他开源项目,几乎没有限制。
import pyglet
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world!',
font_size=36,
x=window.width // 2,
y=window.height // 2,
anchor_x='center',
anchor_y='center')

@window.event
def on_draw():
window.clear()
label.draw()

pyglet.app.run()

这是一个跨平台的Python窗口和多媒体库,用于开发游戏和其他视觉效果丰富的应用程序。它支持窗口化、用户界面事件处理、操纵杆、OpenGL图形、加载图像和视频,以及播放声音和音乐。它可以在Windows、OS X和Linux上运行。它在GitHub上有超过1千颗星。

项目地址:https://github.com/pyglet/pyglet

7. rope

import rope.base.project
myproject = rope.base.project.Project('/path/to/myproject')

这个库提供了强大而安全的重构。它包括轻度依赖性等特点,与PyRight或PyLance不同,它不依赖Node.js,完全由python编写,等等。它在GitHub上有超过1千颗星。

项目地址:https://github.com/python-rope/rope

文档地址:https://rope.readthedocs.io/en/latest/overview.html

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer