初學者的 15 個 Python 實用庫
Python 是初學者易于學習的一門語言,并且提供了大量的第三方庫。超過230,000個用戶貢獻的包使得Python功能強大且廣受歡迎。在本文中,我重點介紹了15個最有用的包,詳細說明了它們的功能和特性。
Dash
Dash 是一個相對新的包,非常適合使用純 Python 構建數據可視化應用程序。它對于任何處理數據的人都非常適合。Dash 結合了 Flask、Plotly.js 和 React.js。
Pygame
Pygame 是 SDL 多媒體庫的 Python 包裝器,這是一個跨平臺的開發庫,提供低級別的訪問權限:
- 音頻
- 鍵盤
- 鼠標
使用 OpenGL 和 Direct3D 的游戲手柄和圖形硬件 Pygame 高度便攜,幾乎可以在每個平臺和操作系統上運行。除了它全面的游戲引擎外,你還可以使用這個庫直接從 Python 腳本播放 MP3 文件。
Pillow
Pillow 專門用于圖像處理。你可以創建縮略圖,轉換文件格式,旋轉,應用過濾器,顯示圖像等等。非常適合批量處理多張圖片。這里有一個快速示例來加載和渲染一張圖片:
from PIL import Image
im = Image.open("kittens.jpg")
im.show()
print(im.format, im.size, im.mode)
# 輸出: JPEG (1920, 1357) RGB
Colorama
Colorama 允許你在終端中使用顏色。它非常適合 Python 腳本,文檔簡潔有趣,可在 Colorama PyPI 頁面上找到。
JmesPath
由于 Python 字典的出色映射,Python 中使用 JSON 變得簡單。Python 的內置 json 庫非常適合解析和創建 JSON。JMESPath 使得 Python 中處理 JSON 更加容易,允許你清晰地指定如何從 JSON 文檔中提取元素。以下是一些基本示例:
import jmespath
# 獲取特定元素
d ={"foo": {"bar": "baz"}}
print(jmespath.search('foo.bar', d))
# 輸出: baz
# 使用通配符獲取所有名稱
d ={"foo": {"bar": [{"name": "one"}, {"name": "two"}]}}
print(jmespath.search('foo.bar[*].name', d))
# 輸出: ["one", "two"]
Requests
Requests 建立在 urllib3 庫之上,使 web 請求變得簡單、強大且多功能。這里有一個快速示例,展示了 Requests 的易用性。
import requests
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
# 200
r.headers['content-type']
# 'application/json; charset=utf8'
r.encoding
# 'utf-8'
r.text
# u'{"type":"User"...'
r.json()
Requests 可以處理高級任務,例如:
- 認證
- Cookies
- POST, PUT, DELETE 請求
- 自定義證書
- 會話
- 代理
Simplejson
Python 的內置 json 模塊沒有問題!實際上,Python 的 json 是基于 simplejson 的。
try:
import simplejson as json
except ImportError:
import json
Simplejson 有一些優勢:
- 適用于更多 Python 版本。
- 更新頻率比 Python 內置版本更頻繁。
- 有可選的 C 部分以提高速度。
除非你需要:
- 速度
- 標準庫中沒有的功能
Simplejson 因為實現了一些關鍵部分的 C 語言,所以速度快得多。然而,這種速度優勢只有在處理數百萬 JSON 文件時才會顯現。
Emoji
Emoji 庫對于涉及 emoji 的媒體數據分析來說既有趣又有用。這里有一個簡單的示例:
import emoji
result = emoji.emojize('Python is :thumbs_up:')
print(result)
# 'Python is ??'
# 也可以反向操作:
result = emoji.demojize('Python is ??')
print(result)
# 'Python is :thumbs_up:'
Chardet
Chardet 可以檢測文件或數據流的字符集,在分析大量隨機文本時非常有用。它在處理遠程數據下載時,當字符集未知時也非常有用。
Python-dateutil
Python-dateutil 強大地擴展了標準 datetime 模塊。當常規 Python datetime 功能結束時,python-dateutil 就開始發揮作用。你可以用這個庫做很多很棒的事情。以下是我發現特別有用的示例:在日志文件中模糊解析日期:
from dateutil.parser import parse
logline ='INFO 2020-01-01T00:00:01 Happy new year, human.'
timestamp = parse(logline, fuzzy=True)
print(timestamp)
# 2020-01-01 00:00:01
有關更多特性,請查看完整文檔:
- 計算相對差異(下個月,明年,下周一,月份的最后一周)以及兩個給定日期對象之間的相對差異。
- 使用 iCalendar 標準超集的根據復發規則計算日期。
- 基于 tzfile 文件、TZ 環境字符串、iCalendar 格式文件、給定范圍、本地時區、固定偏移時區、UTC 和基于 Windows 注冊表的時區的時區(tzinfo)實現。
- 基于 Olson 數據庫的最新世界時區信息。
- 使用西方、東正教或朱利安算法計算任何給定年份的復活節星期日。
進度條:progress 和 tqdm
這有點作弊,因為這是兩個包,但忽略任何一個都是不公平的。創建自己的進度條可能很有趣,但使用 progress 或 tqdm 包更快且更少出錯。使用 progress,你可以輕松創建進度條。
from progress.bar import Bar
bar = Bar('Processing', max=20)
for i inrange(20):
# 做一些工作
bar.next()
bar.finish()
Tqdm 提供了類似的功能,看起來更新更頻繁。以下是一些開始的 gif 演示:
IPython
你可能知道 Python 的交互式 shell,這是運行 Python 的一種很好的方式。但你知道 IPython shell 嗎?如果你經常使用交互式 shell 但還沒有嘗試過 IPython,你應該去看看!IPython 的一些增強功能包括:
- 綜合的對象內省。
- 輸入歷史記錄,在會話之間持久。
- 在會話期間輸出結果緩存并自動引用。
- 標簽補全 Python 變量、關鍵字、文件名和函數關鍵字。
- 控制環境和執行與 IPython 或 OS 相關的許多任務的“魔法”命令。
- 會話日志記錄和重新加載。
- 集成訪問 pdb 調試器和 Python 分析器。
- 一個鮮為人知的特性:IPython 的架構還允許并行和分布式計算。
IPython 是 Jupyter Notebook 的核心,Jupyter Notebook 是一個開源的 web 應用程序,用于創建和共享帶有實時代碼、方程、可視化和敘述文本的文檔。
Home Assistant
我使用 Home Assistant 將我們房子里的所有系統集成在一起:
- 它是一個完整的應用程序,但你也可以將其作為 Python PyPI 包安裝。
- 我們的大部分燈和百葉窗都是自動化的。
- 我監控我們的燃氣使用、電力消耗和生產(太陽能電池板)。
- 我可以追蹤大多數手機的位置,并在進入某個區域時觸發動作,比如當我到家時打開車庫燈。
- 它控制了我們所有的娛樂系統,如三星電視和 Sonos 揚聲器。
- 它可以自動發現網絡上的大多數設備,使設置變得容易。
- 我已經連續三年每天使用 Home Assistant。它仍在測試中,但這是我嘗試過的最好的平臺。
- 它集成和控制各種設備和協議,全部免費且開源。
Flask
Flask 是我創建快速 web 服務或簡單網站的 go-to 庫。它是一個微框架,意味著 Flask 旨在保持核心簡單但可擴展。有超過 700 個官方和社區擴展。如果你知道自己將開發一個大型 web 應用程序,你可能想看看一個更全面的框架。這一類中最受歡迎的是 Django。
BeautifulSoup
從網站提取 HTML 時,你需要解析它以獲取你想要的內容。Beautiful Soup 是一個 Python 庫,用于從 HTML 和 XML 文件中提取數據。它提供了簡單的方法來導航、搜索和修改解析樹。它非常強大,可以處理各種 HTML,即使是損壞的 HTML。一些關鍵特性如下:
- Beautiful Soup 自動將傳入的文檔轉換為 Unicode,將傳出的文檔轉換為 UTF-8。你不需要擔心編碼問題。
- Beautiful Soup 位于流行的 Python 解析器之上,如 XML 和 html5lib,給你嘗試不同解析策略的靈活性。
- Beautiful Soup 會解析你提供的任何內容,并為你完成樹遍歷工作。你可以告訴它“找到所有的鏈接”或者“找到加粗的表格