ホームページ  >  記事  >  バックエンド開発  >  7 つの超強力な Python ライブラリを再び入手しました

7 つの超強力な Python ライブラリを再び入手しました

王林
王林転載
2023-04-11 22:10:101708ブラウズ

「車輪を再発明する必要はない」ということわざがあります。 Python ライブラリはその最良の例です。複雑で時間のかかる機能を簡単な方法で作成するのに役立ちます。私の知る限り、優れたプロジェクトには最高のライブラリがいくつか使用されています。

1. PySnooper

ビットのリストを返すことで数値をバイナリに変換する関数を作成しています。 @pysnooper.snoop() は、デコレータを追加することで調べることができます:

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)

あるいは、関数全体をトレースしたくない場合は、関連する部分を 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()

出力は次のようになります:

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

開発者として、ほとんどの時間はデバッグに費やされます。このライブラリはデバッガです。ほとんどの人は戦略的な場所で印刷行を使用しており、その中には変数の値を表示するものもあります。このライブラリは同じことを行いますが、適切な印刷行を作成する代わりに、関心のある関数にデコレータの行を追加するだけです。どの行がいつ実行されたか、ローカル変数がいつ変更されたかなど、関数の逐語的なログが取得されます。 GitHub には 15,000 個以上のスターが付いています。

プロジェクト アドレス: https://github.com/cool-RR/PySnooper

2.スケジュール

Human Python ジョブ スケジュール。わかりやすい構文を使用して、Python 関数 (またはその他の呼び出し可能な関数) を定期的に実行します。

  • 人間向けに設計された、ジョブをスケジュールするためのシンプルで使いやすい API。
  • 定期ジョブ用のインプロセス スケジューラ。追加のプロセスは必要ありません。
  • 非常に軽量で、外部依存性がありません。
  • 優れたテスト範囲。
  • Python および 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)

これは、人間用の Python ジョブ スケジューリング ライブラリです。これにより、わかりやすい構文を使用して Python 関数 (またはその他の呼び出し可能な関数) を定期的に実行できます。これには、定期的に動作するインプロセス スケジューラ (追加のプロセスは必要ありません)、非常に軽量、外部依存関係がない、優れたテスト カバレッジなど、多くの機能が含まれています。このライブラリには、GitHub 上に 10,000 を超えるスターが付いています。

プロジェクト アドレス: 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)

このライブラリは、Web サイトの実装に役立ちます自動インタラクション。 Cookie を自動的に保存して送信し、リダイレクトを追跡し、リンクをたどってフォームを送信できます。 JavaScriptは行いません。このライブラリには GitHub 上に 4,000 個以上のスターがあります。

プロジェクトアドレス: https://github.com/MechanicalSoup/MechanicalSoup

4.ftfy

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

何ができるのか

ftfy でできることの例をいくつか示します (実際の世界で見られます):

ftfy は、明らかに UTF-8 であるが他の文字にデコードされる文字パターンを検出することで、mojibake (エンコーディングの難読化) を修正できます。

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

これは不可能だと思われますか?本当にありません。 UTF-8 は、誤用された場合に明らかである、適切に設計されたエンコーディングであり、通常、mojibake の文字列には、元の文字列を復元するために必要なすべての情報が含まれています。

ftfy は、mojibake の複数のレイヤーを同時に修正できます:

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

上記で適用された「中引用符」を含む mojibake を修正できます。引用符が展開されるまで継続的にデコードすることはできません:

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

ftfy 文字 U A0 (非改行スペース) を含む mojibake を修正できますが、U A0 は ASCII スペースになり、後続の別のスペースと結合されます:

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

ftfy 外側に表示される HTML エンティティもデコードできますエンティティが大文字で間違って使用されている場合でも、 HTML のエラーが発生します:

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

ftfy には誤検知を回避するという確固たる目標があるため、これらの修正はすべてのケースに適用されるわけではありません。正しくデコードされるべきではありません。テキストは何かに変更されます。それ以外。

次のテキストは Windows-1252 でエンコードし、UTF-8 でデコードでき、「MARQUɅ」としてデコードされます。ただし、原文は明瞭なので変更しません。

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

このライブラリは、さまざまな方法で壊れた Unicode を修正するのに役立ちます。このライブラリの目的は、不正な Unicode を受信し、Unicode 対応コードで使用できる適切な Unicode を出力することです。 GitHub には 3,000 個以上のスターが付いています。

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

5. rpyc

7 つの超強力な Python ライブラリを再び入手しました

这是一个透明的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

以上が7 つの超強力な Python ライブラリを再び入手しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。