Python 脚本编写
學習內容:
- Python 安裝和環境設置
- 運行和修改 Python 腳本
- 與用戶輸入交互
- 處理異常
- 讀寫文件
- 導入本地、標準和第三方模塊
- 在解釋器中進行實驗
安裝 Python
檢查計算機是否安裝了 Python ?
在終端窗口輸入如下指令,并按回車
python --version系統可能會顯示已安裝的 Python 版本是 Python 2.7.9。在這種情況下,表明你已經安裝了 Python 2。如果版本號以 3 開頭,則表明你已經安裝了 Python 3!請勿再次安裝 Python!
下載/安裝 Anaconda
如果你對數據科學方面的 Python 感興趣,強烈建議安裝Anaconda,即使你已經在計算機上安裝了 Python。
Anaconda 和 Jupyter notebook 已經成為數據分析的標準環境。簡單來說,Anaconda是包管理器和環境管理器,Jupyter notebook 可以將數據分析的代碼、圖像和文檔全部組合到一個web文檔中。
Anaconda 安裝教程
下載/安裝 Python
Python 下載,找到適用于你的操作系統、下載 3 開頭的最新版本。
如果你使用的是 Windows 設備,確保在安裝過程中選中 Add Python 3.5 to PATH 或 Add Python to environment variables 選項,這樣可以確保從命令行提示符窗口中訪問 Python。
如果你使用的是 Windows 設備,并且已經安裝了 Python,但是未選中上述選項,則需要將 Python 添加到 PATH。這樣的話,當你輸入 python 時,可以告訴命令行運行 Python 3。如果你未選中上述選項,或者轉到下一階段時似乎不可行,請按照 Python 文檔中的這些說明將 Python 添加到 PATH。
運行 Python 腳本
將 Python3 下載并配置好后,在終端窗口檢查是否配置成功
...$ python --version Python 3.6.6 :: Anaconda custom (64-bit)在終端窗口使用 cd 命令轉到包含 .py 的 python 文件目錄,運行該文件,查看結果
...$ cd .. ...$ cd /udacity/python ...$ ls first_script.py untitled.py ...$ python first_script.py Congratulations on running this script!!配置 Python 編程環境
推薦的文本編輯器:
- Sublime Text
下載并安裝好后,需要將我們新下載的 Python3 與 Sublime 編輯器關聯。可以參考文章 Mac下Sublime Text3配置Python3開發環境
內置函數 input()
我們可以使用內置函數 input 獲取用戶的原始輸入,該函數接受一個可選字符串參數,用于指定在要求用戶輸入時向用戶顯示的消息。
name = input("Enter your name: ") print("Hello there, {}!".format(name.title()))input 函數獲取用戶輸入的任何內容并將其存儲為字符串。如果你想將輸入解析為字符串之外的其他類型,例如整數(如以下示例所示),需要用新的類型封裝結果并從字符串轉換為該類型。
num = int(input("Enter an integer")) print("hello" * num)我們還可以使用內置函數 eval 將用戶輸入解析為 Python 表達式。該函數會將字符串評估為一行 Python 代碼。
result = eval(input("Enter an expression: ")) print(result) # 輸出 ...$ python untitled.py Enter an expression: 3*2 6示例
錯誤與異常
- 錯誤,當 Python 無法解析代碼時,就會發生語法錯誤,因為我們沒有遵守正確的 Python 語法。當你出現拼寫錯誤或第一次開始學習 Python 時,可能會遇到這些錯誤。
- 異常,當在程序執行期間出現意外情況時,就會發生異常,即使代碼在語法上正確無誤。Python 有不同類型的內置異常,你可以在錯誤消息中查看系統拋出了什么異常。
如果你沒有使用正確的語法,并且 Python 不知道如何運行你的代碼,會發生語法錯誤。
如果 Python 在執行代碼時遇到意外情形,會發生異常,即使你采用了正確的語法,也可能會發生異常。
處理異常
Try 語句
我們可以使用 try 語句 來處理異常。
- try:這是 try 語句中的唯一必需子句。該塊中的代碼是 Python 在 try 語句中首先運行的代碼。
- except:如果 Python 在運行 try 塊時遇到異常,它將跳到處理該異常的 except 塊。
- else:如果 Python 在運行 try 塊時沒有遇到異常,它將在運行 try 塊后運行該塊中的代碼。
- finally:在 Python 離開此 try 語句之前,在任何情形下它都將運行此 finally 塊中的代碼,即使要結束程序,例如:如果 Python 在運行 except 或 else 塊中的代碼時遇到錯誤,在停止程序之前,依然會執行此finally 塊。
為何在 Python 中需要 finally 子句?
您可以使用它 finally 來確保文件或資源是否已關閉或釋放,無論是否發生異常,即使您沒有捕獲到異常。
指定異常
我們可以指定要在 except 塊中處理哪個錯誤,如下所示:
try:# some code except ValueError:# some code現在它會捕獲 ValueError 異常,但是不會捕獲其他異常。如果我們希望該處理程序處理多種異常,我們可以在 except 后面添加異常元組。
try:# some code except (ValueError, KeyboardInterrupt):# some code或者,如果我們希望根據異常執行不同的代碼塊,可以添加多個 except 塊。
try:# some code except ValueError:# some code except KeyboardInterrupt:# some code訪問異常信息
try:# some code except ZeroDivisionError as e:# some codeprint("ZeroDivisionError occurred: {}".format(e))# 輸出ZeroDivisionError occurred: division by zero因此依然可以訪問錯誤消息,即使已經處理異常以防止程序崩潰!
Exception 是所有內置異常的基礎類。你可以在此處詳細了解 Python 的異常。
讀寫文件
讀取文件
f = open('my_path/my_file.txt', 'r') file_data = f.read() f.close()代碼中 f.read() 調用沒有傳入參數。它自動變成從當前位置讀取文件的所有剩余內容,即整個文件。如果向 .read() 傳入整型參數,它將讀取長度是這么多字符的內容,輸出所有內容,并使 ‘window’ 保持在該位置以準備繼續讀取。
with open(camelot.txt) as song:print(song.read(2))print(song.read(8))print(song.read()) # 輸出 """ We 're the knights of the round table We dance whenever we're able """文本塊中的 \n 是換行符。換行符表示一行的結束,告訴程序(例如文本編輯器)轉到下一行。但是,對于文件中的一系列字符來說,\n 只是另一個字符。 幸運的是,Python 知道這些是特殊字符,你可以要求 Python 每次讀取一行。
f.readline(),讀取文件下一行的方法。
很方便的是,Python 將使用語法 for line in file 循環訪問文件中的各行內容。 我可以使用該語法創建列表中的行列表。因為每行依然包含換行符,因此我使用 .strip() 刪掉換行符。
camelot_lines = [] with open("camelot.txt") as f:for line in f:camelot_lines.append(line.strip())print(camelot_lines) # 輸出 """ ["We're the knights of the round table", "We dance whenever we're able"]"""寫入文件
f = open('my_path/my_file.txt', 'w') f.write("Hello there!") f.close()With
Python 提供了一個特殊的語法,該語法會在你使用完文件后自動關閉該文件。
with open('my_path/my_file.txt', 'r') as f:file_data = f.read()該 with 關鍵字使你能夠打開文件,對文件執行操作,并在縮進代碼(在此示例中是讀取文件)執行之后自動關閉文件。現在,我們不需要調用 f.close() 了!你只能在此縮進塊中訪問文件對象 f。
導入本地腳本
我們實際上可以導入其他腳本中的 Python,如果你處理的是大型項目,需要將代碼整理成多個文件并重復利用這些文件中的代碼,則導入腳本很有用。如果你要導入的 Python 腳本與當前腳本位于同一個目錄下,只需輸入 import,然后是文件名,無需擴展名 .py。
import useful_functionsImport 語句寫在 Python 腳本的頂部,每個導入語句各占一行。該 import 語句會創建一個模塊對象,叫做 useful_functions。模塊是包含定義和語句的 Python 文件。要訪問導入模塊中的對象,需要使用點記法。
import useful_functions useful_functions.add_five([1, 2, 3, 4])我們可以為導入模塊添加別名,以使用不同的名稱引用它。
import useful_functions as uf uf.add_five([1, 2, 3, 4])使用 if main 塊
為了避免運行從其他腳本中作為模塊導入的腳本中的可執行語句,將這些行包含在 if __name__ == "__main__" 塊中。或者,將它們包含在函數 main() 中并在 if main 塊中調用該函數。
每當我們運行此類腳本時,Python 實際上會為所有模塊設置一個特殊的內置變量 __name__。當我們運行腳本時,Python 會將此模塊識別為主程序,并將此模塊的 name 變量設為字符串 "__main__"。對于該腳本中導入的任何模塊,這個內置 name 變量會設為該模塊的名稱。因此,條件 if __name__ == "__main__" 會檢查該模塊是否為主程序。
# demo.pyimport useful_functions as ufscores = [88, 92, 79, 93, 85]mean = uf.mean(scores) curved = uf.add_five(scores)mean_c = uf.mean(curved)print("Scores:", scores) print("Original Mean:", mean, " New Mean:", mean_c)print(__name__) print(uf.__name__) # useful_functions.pydef mean(num_list):return sum(num_list) / len(num_list)def add_five(num_list):return [n + 5 for n in num_list]def main():print("Testing mean function")n_list = [34, 44, 23, 46, 12, 24]correct_mean = 30.5assert(mean(n_list) == correct_mean)print("Testing add_five function")correct_list = [39, 49, 28, 51, 17, 29]assert(add_five(n_list) == correct_list)print("All tests passed!")if __name__ == '__main__':main()標準庫的模塊
上面介紹了我們如何導入自己的模塊,但 Python 也內置了完整的標準庫模塊。標準庫里面有大量實用模塊,我們可以將這個庫看作是一個非常龐大的工具集,幫助我們輕松獲取和使用現有代碼大大增強我們的編程技能。
Python 標準庫詳細介紹了每種模塊,模塊按照用途分類。標準庫中的每個模塊都是全小寫形式。在使用每個模塊時,建議閱讀相關的頁面。
推薦模塊
Python 標準庫包含大量模塊!為了幫助你熟悉那些實用的模塊,我們在下面篩選了一些我們推薦的 Python 標準庫模塊并解釋為何我們喜歡使用它們!
- csv:對于讀取 csv 文件來說非常便利
- collections:常見數據類型的實用擴展,包括 OrderedDict、defaultdict 和 namedtuple
- random:生成假隨機數字,隨機打亂序列并選擇隨機項
- string:關于字符串的更多函數。此模塊還包括實用的字母集合,例如 string.digits(包含所有字符都是有效數字的字符串)
- re:通過正則表達式在字符串中進行模式匹配
- math:一些標準數學函數
- os:與操作系統交互
- os.path:os 的子模塊,用于操縱路徑名稱
- sys:直接使用 Python 解釋器
- json:適用于讀寫 json 文件(面向網絡開發)。
導入模塊技巧
1.要從模塊中導入單個函數或類:
from module_name import object_name2.要從模塊中導入多個單個對象:
from module_name import first_object, second_object3.要重命名模塊:
import module_name as new_name4.要從模塊中導入對象并重命名:
from module_name import object_name as new_name5.要從模塊中單個地導入所有對象,請使用標準導入 module_name 語句并使用點記法訪問每個對象。
import module_name為了更好地管理代碼,Standard 標準庫中的模塊被拆分成了子模塊并包含在軟件包中。軟件包是一個包含子模塊的模塊。子模塊使用普通的點記法指定。
子模塊的指定方式是軟件包名稱、點,然后是子模塊名稱。你可以如下所示地導入子模塊。
import package_name.submodule_name第三方庫
獨立開發者編寫了成千上萬的第三方庫!你可以使用 pip 安裝這些庫。pip 是在 Python 3 中包含的軟件包管理器,它是標準 Python 軟件包管理器,但并不是唯一的管理器。另一個熱門的管理器是 Anaconda,該管理器專門針對數據科學。
要使用 pip 安裝軟件包,在命令行中輸入“pip install”,然后是軟件包名稱,如下所示:pip install package_name。該命令會下載并安裝該軟件包,以便導入你的程序中。安裝完畢后,你可以使用從標準庫中導入模塊時用到的相同語法導入第三方軟件包。
使用 requirements.txt 文件
大型 Python 程序可能依賴于十幾個第三方軟件包。為了更輕松地分享這些程序,程序員經常會在叫做 requirements.txt 的文件中列出項目的依賴項。下面是一個 requirements.txt 文件示例。
beautifulsoup4==4.5.1 bs4==0.0.1 pytz==2016.7 requests==2.11.1該文件的每行包含軟件包名稱和版本號。版本號是可選項,但是通常都會包含。不同版本的庫之間可能變化不大,可能截然不同,因此有必要使用程序作者在寫程序時用到的庫版本。
你可以使用 pip 一次性安裝項目的所有依賴項,方法是在命令行中輸入 pip install -r requirements.txt。
實用的第三方軟件包
能夠安裝并導入第三方庫很有用,但是要成為優秀的程序員,還需要知道有哪些庫可以使用。大家通常通過在線推薦或同事介紹了解實用的新庫。如果你是一名 Python 編程新手,可能沒有很多同事,因此為了幫助你了解入門信息,下面是優達學城工程師很喜歡使用的軟件包列表。(可能部分網站在國內網絡中無法打開)
- IPython - 更好的交互式 Python 解釋器。
- requests - 提供易于使用的方法來發出網絡請求。適用于訪問網絡 API。
- Flask - 一個小型框架,用于構建網絡應用和 API。
- Django - 一個功能更豐富的網絡應用構建框架。Django 尤其適合設計復雜、內容豐富的網絡應用。
- Beautiful Soup - 用于解析 HTML 并從中提取信息。適合網頁數據抽取。
- pytest - 擴展了 Python 的內置斷言,并且是最具單元性的模塊。
- PyYAML - 用于讀寫 YAML 文件。
- NumPy - 用于使用 Python 進行科學計算的最基本軟件包。它包含一個強大的 N 維數組對象和實用的線性代數功能等。
- pandas - 包含高性能、數據結構和數據分析工具的庫。尤其是,pandas 提供 dataframe!
- matplotlib - 二維繪制庫,會生成達到發布標準的高品質圖片,并且采用各種硬拷貝格式和交互式環境。
- ggplot - 另一種二維繪制庫,基于 R’s ggplot2 庫。
- Pillow - Python 圖片庫可以向你的 Python 解釋器添加圖片處理功能。
- pyglet - 專門面向游戲開發的跨平臺應用框架。
- Pygame - 用于編寫游戲的一系列 Python 模塊。
- pytz - Python 的世界時區定義。
文章只是作為個人記錄學習使用,如有不妥之處請指正,謝謝。
總結
以上是生活随笔為你收集整理的Python 脚本编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新AxureUX WEB端交互原型通用
- 下一篇: 知乎每日精选python阅读脚本