近幾年 Python 語言之所以流行,是因為我們可以使用它撰寫更少的代碼來實作復雜的功能,Python 開發者社區非常歡迎那些封
裝了復雜實作但是對使用者十分友好的工具包,
然而,Python 的簡便性不止如此,你能相信我們可以在不寫任何代碼的情況下使用 Python 嗎?在接下來的文章中,我會介紹 8
個無需撰寫任何代碼即可使用 Python 內置功能的例子,

0. Python CLI “-m”引數
我們首先從 Python CLI(命令列界面)開始談起,雖然我們不必撰寫代碼來使用稍后介紹的功能,但是為了讓 Python 知道我們
要執行的內容,我們需要使用 Python 命令列來進行操作,
只要我們的電腦上安裝了 Python 環境,我們就可以在 Python 命令列界面輸入python --help顯示所有支持的引數,

由于命令輸出的內容太長,上圖僅顯示了部分內容,這里最想強調的是-m mod引數,它會將 Python 模塊以腳本的形式運行,因
此,如果該模塊的實作支持命令列操作,我們就可以在命令列直接使用它,接下來就讓我們體驗一下:)

1. 服務埠測驗
有時候,我們想測驗 ip 埠的出站網路流量,通常 telnet 命令是一個不錯的選擇,在 Windows 平臺上默認沒有安裝 telnet 軟
件,使用前需要手動安裝,如果只是進行簡單的測驗,未來使用場景也不多,安裝它可能是一種資源浪費,
但是,如果安裝了 Python,那就不必下載安裝 telnet,因為 Python 內置了 telnet 對應的模塊,我們可以對 Google 搜索網站的
443 埠進行測驗,
Python學習交流Q群:906715085### python -m telnetlib -d 142.250.70.174 443

如上圖所示,網路流量顯示正常,我們甚至收到了來自 Google 空字符的回應,如果我們嘗試訪問 ip 的隨機一個埠,則會拋出
錯誤,如下圖所示,
python -m telnetlib -d 142.250.70.174 999

2. 本地啟動 web 服務
很多 Python 使用者不知道這一點,當第一次聽說后會感到驚訝,是的,我們可以使用 Python 啟動 web 服務,而無需撰寫任何
代碼,只需按如下方式在命令列執行如下命令,
python -m http.server

運行后,顯示該服務監聽了本地的 8000 埠,然后,我們就可以嘗試從瀏覽器進行訪問 http://localhost:8000/,

該 web 服務會以根目錄的形式展示在命令啟動路徑下的本地檔案系統,換句話說,我們無法訪問它的父級目錄,
你可能會問,這個功能的使用場景是什么,舉一個例子,如果你想跟你的好伙伴們分享你電腦某個目錄下的許多文本/PDF/影像文
件/子目錄檔案等,那么使用這個方法就可以非常輕松地進行共享了,
如果你想知道更多關于這個話題的內容,可以參考3 Lines of Python Code to Write A Web Server這篇文章,如果你按照上面的文
章實作了一個“低代碼”的解決方案,那么就可以向它添加更多的自定義功能了,
3. 驗證及格式化 JSON 字串
如果你有一個非常長且未經格式化的 JSON 字串,那么閱讀起來會非常困難,通常,我會使用一些帶有 JSON 插件的文本編輯
器,比如 Sublime 或者 VS Code,來格式化 JSON 字串,但是,如果手頭沒有這些工具,Python 可以臨時一用,比如下面會
以這個簡短的 JSON 字串進行展示,
echo '{"name": {"first_name":"Chris", "last_name":"Tao"} "age":33}'

可以看到,當前作業系統的命令列工具只能按照原字串的原始格式進行展示,但是,如果借助 Python 的 json.tool工具,JSON
字串就會被很好的格式化,
echo '{"name": {"first_name":"Chris", "last_name":"Tao"} "age":33}' | python -m json.tool

Oops!JSON 字串無效,并且 json.tool 幫助我們定位了問題,我們在名稱物件后面漏掉了一個逗號,所以添加逗號以使該
JSON 合法有效,
echo '{"name": {"first_name":"Chris", "last_name":"Tao"}, "age":33}' | python -m json.tool

現在,JSON 字串具有了完美縮進的格式化輸出!更加方便閱讀,

4. 創建文本編輯器
你沒看錯,我們可以使用 Python 來”創建”一個文本編輯器,當然,它的功能非常有限,但是如果當前沒有更好的選擇,使用它會
方便很多,另外,功能上肯定無法與 Vim 和 Nanos 相比,但是它完全是基于 UI 編輯器而不是命令列文本形式,這個編輯器由基
于 Tkinter 實作的idlelib 模塊創建,所以它是可以跨平臺運行的,
假設我們要撰寫一個簡單的 Python 程式來顯示當前的時間,我想快速撰寫代碼而不想下載和安裝龐大的代碼編輯工具,現在讓我
們運行下面這個命令,
mkdir get_time_apppython -m idlelib get_time_app/print_time.py
如果檔案目錄不存在,idlelib將無法創建,因此如果必要,我們需要創建一個,我們運行完這個命令之后,print_time.py 只有執行
保存的情況下才會創建到本地,現在應該會彈出編輯器,我們可以在里面寫一些代碼, 可以看到代碼是支持語法高亮的,

現在我們使用ctrl+s快捷鍵對編輯好的代碼進行保存,并關閉編輯視窗,接下來使用命令列查看一下編輯好的代碼檔案進行驗證,
沒有任何問題,
cat get_time_app/print_time.py

5. 創建可執行應用程式
如果我們想要創建一個簡單的應用,比如前面寫的獲取當前時間的應用程式,我們不必再需要像 PyInstaller 這樣的第三方工具
包,Python 內置的 Zipapp 就可以做到,假設我們要打包成一個"Get Time"的應用,我們可以在命令列運行下面的命令,
python -m zipapp get_time_app -m "print_time:main"
在該命令中,我們只需要給 zipapp設定get_time_app名稱,指定 Python 程式的入口檔案及其程式入口函式即可,以.pyz為擴展
名的檔案就是我們創建的應用程式,至此我們就可以將專案作為單個檔案而不是檔案夾進行分發,

該程式的啟動方式也很簡單,直接使用 Python 進行呼叫即可,
python get_time_app.pyz
6. 編碼和解碼字串或檔案
通過 Python CLI,我們可以加密字串或檔案,我們以有趣的 ROT13 加密演算法為例進行展示,ROT13 是一種偏移 13 位的凱撒
密碼,它的加密原理如下圖所示,

我們可以使用 encodings.rot_13 來加密一個字串,命令如下,
echo "I am Chris" | python -m encodings.rot_13

切記,不要將其用于任何真正的加密內容,因為英文有 26 個字母,所以再次運行這個演算法我們可以很容易地破譯這個加密字符
串:)
echo 'V nz Puevf' | python -m encodings.rot_13

現在讓我們嘗試一個更常見的場景——base64 編碼,我們可以對字串進行 base64 編碼,如下所示,
echo "I am Chris" | python -m base64

接下來,我們也可以使用-d引數對加密字串進行解碼,
echo "SSBhbSBDaHJpcwo=" | python -m base64 -d
base64 也經常用在對影像檔案的編碼和解碼上,我們也可以對檔案進行如下編碼,
python -m base64 get_time_app/print_time.py
非常有趣的是,解碼后的 Python 腳本可以即時執行,不會報錯,,
echo "ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCgpkZWYgbWFpbigpOgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUubm93KCkKICAgIHByaW50KGYnQ3VycmVudCB0aW1lIGlzIHtjdXJyZW50X3RpbWV9LicpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo=" | python -m base64 -d | python

7. 獲取系統元資料
如果我們想獲取當前的系統資訊,Python 提供了一種非常簡便的方法,我們只需要運行下面的命令即可,
python -m sysconfig

可以看到,這個命令執行后會顯示所有的系統配置資訊,比如 Python 環境路徑和環境變數等,上面的截圖僅僅展示了一部分內
容,實際顯示的內容會非常豐富,如果我們只想展示 Python 環境路徑和當前作業路徑,我們可以執行下面的命令,
python -m site
8. 檔案壓縮
我們可以使用 Python 來壓縮檔案,而無需下載 tar/zip/gzip 等工具,舉個例子,如果我們想壓縮我們剛剛在第 4 節中撰寫的應用
程式,我們可以運行以下命令將檔案夾壓縮到 zip 檔案中,在命令中,選項 -c 代表的是“create”即創建的含義,
python -m zipfile -c get_time_app.zip get_time_app

當然,我們也可以對壓縮檔案進行解壓,緊接這上面的操作,我們把檔案夾解壓出來放到一個新目錄中,這樣就不會和原來的目
錄沖突了,在下面的命令中,選項 -e 代表“extract”即解壓的含義,
python -m zipfile -e get_time_app.zip get_time_app_extracted
如果不放心,我們可以檢驗一下,
ls get_time_app_extractedcat get_time_app_extracted/get_time_app/print_time.py

我們剛剛以 zip 檔案為例進行了展示,Python 除了支持 zip 格式的解壓縮以外,還支持 tar 和 gzip 的解壓縮,
總結
該篇文章中介紹了一種無需撰寫任何代碼即可使用 Python 內置庫的方法,如果在某些場景下能夠想到使用這些方法,毫無疑問可
以給我們提供很多的便利,希望這篇文章能夠給大家帶來啟發和幫助,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458486.html
標籤:Python
