Python基礎(chǔ)第十四講:千萬別說你會Python!如果不知道這10個Python包!
世界上有超過200,000個Python程序包(這只是基于官方的Python程序包索引PyPI托管的程序包)。
這就引出了一個問題:擁有這么多的軟件包,每個Python程序員都需要學(xué)習(xí)哪些軟件包是最重要的?
為了幫助回答這個問題,下面列出了您應(yīng)該熟悉的十個最重要,最有用和最普遍使用的Python程序包,因為在您從事各種項目時,它們經(jīng)常會出現(xiàn)。
此列表重點關(guān)注涵蓋多種編程場景和目標(biāo)的Python軟件包,而不是僅關(guān)注特定領(lǐng)域,例如數(shù)據(jù)科學(xué)或Web開發(fā)。這10個里面,你用過幾個?請在評論區(qū)留言。
注:本文為英文翻譯,麥?zhǔn)逭聿⒀a(bǔ)充了代碼示例。原文地址:https://www.activestate.com/blog/top-10-must-have-python-packages/
1. Numpy
您可以執(zhí)行基本的數(shù)學(xué)運算,而無需任何特殊的Python包。但是,如果您要進(jìn)行任何復(fù)雜的數(shù)學(xué)運算,則NumPy軟件包將使您的編碼工作變得更加輕松。
NumPy提供了一些工具來幫助構(gòu)建多維數(shù)組,并對存儲在其中的數(shù)據(jù)進(jìn)行計算。您可以求解代數(shù)公式,執(zhí)行常見的統(tǒng)計運算等等。
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<class 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<class 'numpy.ndarray'>
盡管NumPy是一個有價值的Python軟件包,可用于執(zhí)行各種通用編程任務(wù),但如果您想進(jìn)行機(jī)器學(xué)習(xí),則NumPy尤為重要,因為它為TensorFlow之類的庫提供了部分基礎(chǔ)。
2. Pendulum
如果您至少有一點Python編程經(jīng)驗,則可能知道可以使用datetime模塊來管理應(yīng)用程序中的日期和時間。
盡管datetime非常適合這些方面的基礎(chǔ)工作,但Pendulum Python軟件包使執(zhí)行涉及日期和時間的更復(fù)雜的編碼變得更加容易。使用起來更加直觀,并且可以自動管理時區(qū)。
import pendulum
now = pendulum.now("Europe/Paris")
# Changing timezone
now.in_timezone("America/Toronto")
# Default support for common datetime formats
now.to_iso8601_string()
# Shifting
now.add(days=2)
最棒的是,Pendulum旨在替代datetime。這意味著您可以將其與已經(jīng)基于datetime編寫的代碼一起使用。除了少數(shù)幾個例外,Pendulum同樣可以工作,無需修改代碼,同時提供普通datetime所沒有的其他功能。
3. Python 圖片處理包
如果您的Python應(yīng)用程序以任何方式與圖像進(jìn)行交互,則Python映像庫(也稱為PIL或Pillow)是Python必需的。它使編寫以各種格式打開,修改和保存圖像的代碼變得容易。
from PIL import Image
#Open image using Image module
im = Image.open("images/cuba.jpg")
#Show actual Image
im.show()
#Show rotated Image
im = im.rotate(45)
im.show()
如果您要對圖像進(jìn)行更高級的處理(例如圖像識別,在這種情況下,OpenCV將是一個不錯的選擇),Pillow不會自行裁切的。但是對于基本的圖像導(dǎo)入,處理和導(dǎo)出,Pillow是您的首選解決方案。
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread("C://gfg//tomatoes.jpg", 1)
# Loading the image
half = cv2.resize(image, (0, 0), fx = 0.1, fy = 0.1)
bigger = cv2.resize(image, (1050, 1610))
stretch_near = cv2.resize(image, (780, 540),
interpolation = cv2.INTER_NEAREST)
Titles =["Original", "Half", "Bigger", "Interpolation Nearest"]
images =[image, half, bigger, stretch_near]
count = 4
for i in range(count):
plt.subplot(2, 2, i + 1)
plt.title(Titles[i])
plt.imshow(images[i])
plt.show()
4. MoviePy
MoviePy代表視頻,Pillow代表圖像。它為與導(dǎo)入,修改和導(dǎo)出視頻文件相關(guān)的常見任務(wù)提供了一系列功能。它還可以讓您執(zhí)行一些操作,例如將標(biāo)題插入視頻或?qū)⒁曨l旋轉(zhuǎn)90度(如果出于某種原因您決定這樣做)。
像Pillow一樣,MoviePy也不能用作高級數(shù)據(jù)操作的工具。如果您正在編寫視頻編輯應(yīng)用程序,則可能還需要依靠OpenCV(它可以同時處理視頻和圖像)來提供MoviePy缺少的高級功能。但是對于涉及Python代碼視頻的大多數(shù)標(biāo)準(zhǔn)任務(wù),MoviePy可以很好地完成工作。
from skimage.filters import gaussian_filter
from moviepy.editor import VideoFileClip
def blur(image):
""" Returns a blurred (radius=2 pixels) version of the image """
return gaussian_filter(image.astype(float), sigma=2)
clip = VideoFileClip("my_video.mp4")
clip_blurred = clip.fl_image( blur )
clip_blurred.write_videofile("blurred_video.mp4")
5. requests
編寫發(fā)送HTTP請求的代碼可能很棘手,這在很大程度上要歸因于HTTP并未以人類易于閱讀的方式精確地格式化數(shù)據(jù)。
Requests Python程序包(座右銘:“ HTTP for Humans”)通過自動執(zhí)行許多繁瑣的任務(wù)來解決此問題,讓發(fā)送HTTP請求變得異常簡單。它消除了添加查詢字符串或執(zhí)行POST表單編碼的需要。它還可以使與HTTP服務(wù)器的連接自動保持活動狀態(tài),從而無需編寫大量代碼。
import requests
from requests.exceptions import HTTPError
for url in ['https://api.github.com', 'https://api.github.com/invalid']:
try:
response = requests.get(url)
# If the response was successful, no Exception will be raised
response.raise_for_status()
except HTTPError as http_err:
print(f'HTTP error occurred: {http_err}') # Python 3.6
except Exception as err:
print(f'Other error occurred: {err}') # Python 3.6
else:
print('Success!')
簡而言之,如果您的應(yīng)用程序通過HTTP發(fā)送任何數(shù)據(jù),則請求是必不可少的程序包。
6. Tkinter
是否要開發(fā)具有圖形用戶界面(GUI)的Python應(yīng)用程序?
有很多做圖形界面的Python包(實際上,我們都可以來個Python GUI前十排行榜)。但是我認(rèn)為大多數(shù)Python開發(fā)人員都會同意Tkinter是用于創(chuàng)建GUI的最重要且也是最常用的框架。它將Python綁定到TK GUI工具箱,該工具箱幾乎可在所有現(xiàn)代操作系統(tǒng)上運行。
from tkinter import *
window = Tk()
window.title("Welcome to LikeGeeks app")
window.mainloop()
除非您強(qiáng)烈希望使用其他GUI工具包,否則Tkinter可能是創(chuàng)建Python GUI的最佳起點。
7. PyQt
盡管前面大力推薦Tkinter,PyQT(另一個用于構(gòu)建GUI的Python軟件包)也是一個有力的競爭者。它提供了到Qt工具箱的綁定(您猜對了),該工具箱也是跨平臺的。它比Tkinter用于重型GUI編程。這意味著如果您要構(gòu)建具有非常簡單的界面的應(yīng)用程序(例如,只有帶有一些按鈕和文本字段的窗口),使用Tkinter就對了。但如果要構(gòu)建一個很復(fù)雜的桌面程序,比如開發(fā)一個QQ程序,則PyQT會更適合。

8. Pandas
有大量的Python軟件包設(shè)計用于處理復(fù)雜的數(shù)據(jù)集。但是可以說,Pandas是最重要的。Pandas可以幫助您處理和分析大量數(shù)據(jù),而無需學(xué)習(xí)專門的數(shù)據(jù)處理語言(例如R)。
Pandas有其局限性,因為它不適合用于高級統(tǒng)計建模(在這種情況下,您可能想學(xué)習(xí)R或使用statsmodels之類的Python包)。但是,如果您需要執(zhí)行諸如處理時間序列數(shù)據(jù)或?qū)?shù)據(jù)集進(jìn)行統(tǒng)計分析之類的工作,Pandas可以為您服務(wù)。
In [5]: dates = pd.date_range("20130101", periods=6)
In [6]: dates
Out[6]:
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
In [7]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list("ABCD"))
In [8]: df
Out[8]:
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-05 -0.424972 0.567020 0.276232 -1.087401
2013-01-06 -0.673690 0.113648 -1.478427 0.524988
9. Pywin32
特別是對于Windows Python編程,Pywin32是必備軟件包。它提供對許多本機(jī)Windows API函數(shù)的訪問,使您可以執(zhí)行諸如與Windows注冊表進(jìn)行交互,使用Windows剪貼板等操作。
如果您要構(gòu)建跨平臺的Python應(yīng)用程序,那么Pywin32并不能為您帶來很多好處,但是Windows開發(fā)人員可能會發(fā)現(xiàn)他們非常喜歡它,以至于使用它代替了本機(jī)Windows工具。
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
_ = input("Press ENTER to quit:")
excel.Application.Quit()
10. Pytest
如果您有一個復(fù)雜的Python開發(fā)項目,那么對新代碼執(zhí)行測試就至關(guān)重要。Pytest軟件包提供了各種模塊來幫助您完成此任務(wù)。無論是簡單的單元測試還是更復(fù)雜的功能測試,Pytest都可以幫助您編寫它。
# test_capitalize.py
import pytest
def test_capital_case():
assert capital_case('semaphore') == 'Semaphore'
def test_raises_exception_on_non_string_arguments():
with pytest.raises(TypeError):
capital_case(9)
如果您最喜歡的Python庫或框架未在前十個必備Python軟件包中列出此列表,請不要冒犯。Python生態(tài)系統(tǒng)已經(jīng)生成了許多有價值的軟件包,以至于即使在前100名列表中,也不可能包括所有重要軟件包,更不用說前10名列表了。但是,對于通用Python編程,上述軟件包基本是必備。
【提高】40多個項目實戰(zhàn),老手可以從真實場景中學(xué)習(xí)python;
【直播】不定期直播項目案例講解,手把手教你如何分析項目;
【分享】優(yōu)質(zhì)python學(xué)習(xí)資料分享,讓你在最短時間獲得有價值的學(xué)習(xí)資源;圈友優(yōu)質(zhì)資料或?qū)W習(xí)分享,會不時給予贊賞支持,希望每個優(yōu)質(zhì)圈友既能賺回加入費用,也能快速成長,并享受分享與幫助他人的樂趣。
【人脈】收獲一群志同道合的朋友,并且都是python從業(yè)者
【價格】本著布道思想,只需 69元 加入一個能保證學(xué)習(xí)效果的良心圈子。

