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