初學(xué)者的 15 個(gè) Python 實(shí)用庫
Python 是初學(xué)者易于學(xué)習(xí)的一門語言,并且提供了大量的第三方庫。超過230,000個(gè)用戶貢獻(xiàn)的包使得Python功能強(qiáng)大且廣受歡迎。在本文中,我重點(diǎn)介紹了15個(gè)最有用的包,詳細(xì)說明了它們的功能和特性。
Dash
Dash 是一個(gè)相對新的包,非常適合使用純 Python 構(gòu)建數(shù)據(jù)可視化應(yīng)用程序。它對于任何處理數(shù)據(jù)的人都非常適合。Dash 結(jié)合了 Flask、Plotly.js 和 React.js。
Pygame
Pygame 是 SDL 多媒體庫的 Python 包裝器,這是一個(gè)跨平臺(tái)的開發(fā)庫,提供低級(jí)別的訪問權(quán)限:
- 音頻
- 鍵盤
- 鼠標(biāo)
使用 OpenGL 和 Direct3D 的游戲手柄和圖形硬件 Pygame 高度便攜,幾乎可以在每個(gè)平臺(tái)和操作系統(tǒng)上運(yùn)行。除了它全面的游戲引擎外,你還可以使用這個(gè)庫直接從 Python 腳本播放 MP3 文件。
Pillow
Pillow 專門用于圖像處理。你可以創(chuàng)建縮略圖,轉(zhuǎn)換文件格式,旋轉(zhuǎn),應(yīng)用過濾器,顯示圖像等等。非常適合批量處理多張圖片。這里有一個(gè)快速示例來加載和渲染一張圖片:
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 的內(nèi)置 json 庫非常適合解析和創(chuàng)建 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 請求變得簡單、強(qiáng)大且多功能。這里有一個(gè)快速示例,展示了 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 可以處理高級(jí)任務(wù),例如:
- 認(rèn)證
- Cookies
- POST, PUT, DELETE 請求
- 自定義證書
- 會(huì)話
- 代理
Simplejson
Python 的內(nèi)置 json 模塊沒有問題!實(shí)際上,Python 的 json 是基于 simplejson 的。
try:
import simplejson as json
except ImportError:
import json
Simplejson 有一些優(yōu)勢:
- 適用于更多 Python 版本。
- 更新頻率比 Python 內(nèi)置版本更頻繁。
- 有可選的 C 部分以提高速度。
除非你需要:
- 速度
- 標(biāo)準(zhǔn)庫中沒有的功能
Simplejson 因?yàn)閷?shí)現(xiàn)了一些關(guān)鍵部分的 C 語言,所以速度快得多。然而,這種速度優(yōu)勢只有在處理數(shù)百萬 JSON 文件時(shí)才會(huì)顯現(xiàn)。
Emoji
Emoji 庫對于涉及 emoji 的媒體數(shù)據(jù)分析來說既有趣又有用。這里有一個(gè)簡單的示例:
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 可以檢測文件或數(shù)據(jù)流的字符集,在分析大量隨機(jī)文本時(shí)非常有用。它在處理遠(yuǎn)程數(shù)據(jù)下載時(shí),當(dāng)字符集未知時(shí)也非常有用。
Python-dateutil
Python-dateutil 強(qiáng)大地?cái)U(kuò)展了標(biāo)準(zhǔn) datetime 模塊。當(dāng)常規(guī) Python datetime 功能結(jié)束時(shí),python-dateutil 就開始發(fā)揮作用。你可以用這個(gè)庫做很多很棒的事情。以下是我發(fā)現(xiàn)特別有用的示例:在日志文件中模糊解析日期:
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
有關(guān)更多特性,請查看完整文檔:
- 計(jì)算相對差異(下個(gè)月,明年,下周一,月份的最后一周)以及兩個(gè)給定日期對象之間的相對差異。
- 使用 iCalendar 標(biāo)準(zhǔn)超集的根據(jù)復(fù)發(fā)規(guī)則計(jì)算日期。
- 基于 tzfile 文件、TZ 環(huán)境字符串、iCalendar 格式文件、給定范圍、本地時(shí)區(qū)、固定偏移時(shí)區(qū)、UTC 和基于 Windows 注冊表的時(shí)區(qū)的時(shí)區(qū)(tzinfo)實(shí)現(xiàn)。
- 基于 Olson 數(shù)據(jù)庫的最新世界時(shí)區(qū)信息。
- 使用西方、東正教或朱利安算法計(jì)算任何給定年份的復(fù)活節(jié)星期日。
進(jìn)度條:progress 和 tqdm
這有點(diǎn)作弊,因?yàn)檫@是兩個(gè)包,但忽略任何一個(gè)都是不公平的。創(chuàng)建自己的進(jìn)度條可能很有趣,但使用 progress 或 tqdm 包更快且更少出錯(cuò)。使用 progress,你可以輕松創(chuàng)建進(jìn)度條。
from progress.bar import Bar
bar = Bar('Processing', max=20)
for i inrange(20):
# 做一些工作
bar.next()
bar.finish()
Tqdm 提供了類似的功能,看起來更新更頻繁。以下是一些開始的 gif 演示:
IPython
你可能知道 Python 的交互式 shell,這是運(yùn)行 Python 的一種很好的方式。但你知道 IPython shell 嗎?如果你經(jīng)常使用交互式 shell 但還沒有嘗試過 IPython,你應(yīng)該去看看!IPython 的一些增強(qiáng)功能包括:
- 綜合的對象內(nèi)省。
- 輸入歷史記錄,在會(huì)話之間持久。
- 在會(huì)話期間輸出結(jié)果緩存并自動(dòng)引用。
- 標(biāo)簽補(bǔ)全 Python 變量、關(guān)鍵字、文件名和函數(shù)關(guān)鍵字。
- 控制環(huán)境和執(zhí)行與 IPython 或 OS 相關(guān)的許多任務(wù)的“魔法”命令。
- 會(huì)話日志記錄和重新加載。
- 集成訪問 pdb 調(diào)試器和 Python 分析器。
- 一個(gè)鮮為人知的特性:IPython 的架構(gòu)還允許并行和分布式計(jì)算。
IPython 是 Jupyter Notebook 的核心,Jupyter Notebook 是一個(gè)開源的 web 應(yīng)用程序,用于創(chuàng)建和共享帶有實(shí)時(shí)代碼、方程、可視化和敘述文本的文檔。
Home Assistant
我使用 Home Assistant 將我們房子里的所有系統(tǒng)集成在一起:
- 它是一個(gè)完整的應(yīng)用程序,但你也可以將其作為 Python PyPI 包安裝。
- 我們的大部分燈和百葉窗都是自動(dòng)化的。
- 我監(jiān)控我們的燃?xì)馐褂谩㈦娏ο暮蜕a(chǎn)(太陽能電池板)。
- 我可以追蹤大多數(shù)手機(jī)的位置,并在進(jìn)入某個(gè)區(qū)域時(shí)觸發(fā)動(dòng)作,比如當(dāng)我到家時(shí)打開車庫燈。
- 它控制了我們所有的娛樂系統(tǒng),如三星電視和 Sonos 揚(yáng)聲器。
- 它可以自動(dòng)發(fā)現(xiàn)網(wǎng)絡(luò)上的大多數(shù)設(shè)備,使設(shè)置變得容易。
- 我已經(jīng)連續(xù)三年每天使用 Home Assistant。它仍在測試中,但這是我嘗試過的最好的平臺(tái)。
- 它集成和控制各種設(shè)備和協(xié)議,全部免費(fèi)且開源。
Flask
Flask 是我創(chuàng)建快速 web 服務(wù)或簡單網(wǎng)站的 go-to 庫。它是一個(gè)微框架,意味著 Flask 旨在保持核心簡單但可擴(kuò)展。有超過 700 個(gè)官方和社區(qū)擴(kuò)展。如果你知道自己將開發(fā)一個(gè)大型 web 應(yīng)用程序,你可能想看看一個(gè)更全面的框架。這一類中最受歡迎的是 Django。
BeautifulSoup
從網(wǎng)站提取 HTML 時(shí),你需要解析它以獲取你想要的內(nèi)容。Beautiful Soup 是一個(gè) Python 庫,用于從 HTML 和 XML 文件中提取數(shù)據(jù)。它提供了簡單的方法來導(dǎo)航、搜索和修改解析樹。它非常強(qiáng)大,可以處理各種 HTML,即使是損壞的 HTML。一些關(guān)鍵特性如下:
- Beautiful Soup 自動(dòng)將傳入的文檔轉(zhuǎn)換為 Unicode,將傳出的文檔轉(zhuǎn)換為 UTF-8。你不需要擔(dān)心編碼問題。
- Beautiful Soup 位于流行的 Python 解析器之上,如 XML 和 html5lib,給你嘗試不同解析策略的靈活性。
- Beautiful Soup 會(huì)解析你提供的任何內(nèi)容,并為你完成樹遍歷工作。你可以告訴它“找到所有的鏈接”或者“找到加粗的表格