python脚本编写
?
什么是腳本
Python 是一種“腳本語言”。腳本,對應的英文是:script。一般人看到script這個英文單詞,或許想到的更多的是:電影的劇本,就是一段段的腳本,所組成的。電影劇本的腳本,決定了電影中的人和物,都做哪些事情,怎么做。而計算機中的腳本,決定了:計算機中的操作系統和各種軟件工具,要做哪些事情,以及具體怎么做。
腳本 vs 程序
你可能想要了解腳本與一般程序的區別是什么。
腳本與一般程序的主要區別在于是否編譯。相對于程序而言,腳本更加隨性。寫完了腳本,直接就可以在某種具有解釋功能的環境中運行。(我們將會在本課學習如何寫和運行 Python 腳本。)
而非腳本語言(編譯語言),比如 C、Java 語言。我們需要通過編譯(Compile)和鏈接(link)等步驟,生成可執行文件。然后通過可執行文件在計算機上運行。
腳本編寫
歡迎學習這節關于腳本編寫的課程!你將學習:
- Python 安裝和環境設置
- 運行和修改 Python 腳本
- 與用戶輸入交互
- 處理異常
- 讀寫文件
- 導入本地、標準和第三方模塊
- 在解釋器中進行實驗
安裝 Python 3
我們將使用最新版 Python - Python 3。雖然 Python 2 在很多場合依然會用到,但是已經不再接受更新。為了與后續 Python 改進保持兼容,建議使用 Python 3。
為了完成這一步驟,你需要使用命令行。我們將詳細介紹所有細節部分,因此如果你從未使用過命令行,也沒關系!如果你想深入了解命令行,請參閱我們的?Shell 講習班,詳細了解 Unix Shell。
你的計算機上已經有 Python 嗎?
Mac OS X 和 Linux 通常已經自帶了一個版本號比較老的 Python 2,請不要對該 Python 做出任何修改或者刪除,因為操作系統的部分組件依賴它,修改或者刪除它可能會影響到操作系統的某些功能。但是單獨安裝 Python 3,也不會對系統有任何影響。
Windows 通常沒有自帶 Python,但是你可以在安裝之前,先檢查下系統是否安裝了 Python。首先檢查是否已經安裝了 Python 3。
打開終端或命令行。在 Windows 上,進入命令提示符窗口的方式是轉到運行…(同時按下帶有windows圖標的win鍵+字母r),然后輸入?cmd?并按下?Enter?鍵。
在新的終端或命令提示符窗口中,輸入?python --version?或者?python3 --version
$ python --version然后按下?Enter?鍵。
注意:這里的$符號在這里只是一個提示,表示命令行的開始,它會自動顯示在屏幕上。這不是命令的一部分。
系統可能會顯示已安裝的 Python 版本是?Python 2.7.9。在這種情況下,表明你已經安裝了 Python 2,你需要按照下面幾個部分中的步驟操作,更新到 Python 3。
如果版本號以 3 開頭,則表明你已經安裝了 Python 3!請勿再次安裝 Python!
此外,你可能會看到錯誤消息。暫時不用管該錯誤,直接嘗試下面幾個部分中的步驟。
方法 1:安裝 Anaconda
對于數據分析學員,強烈建議采用這種 Python 安裝方式。
如果你對數據科學方面的 Python 感興趣,強烈建議安裝?Anaconda,即使你已經在計算機上安裝了 Python。如果你尚未設置計算機,請參閱我們的?Anaconda 和 Jupyter notebook?簡短課程設置計算機。你將學習如何為這門課程設置環境,需要安裝 Python 3.6、Jupyter Notebook、NumPy、pandas、Matplotlib 和 Seaborn。
Anaconda 包含大量專門針對數據科學的庫和軟件分發版本,某些庫和軟件比較難安裝。同時,你可以很輕松地在計算機上設置不同的環境,以便在不同版本的 Python 和軟件包之間快速切換!例如,如果你正在處理的某個項目需要 Python 3.6 以及不同的依賴項,那么 Anaconda 的環境管理功能可以提供幫助。上面給出鏈接的 Anaconda 和 Jupyter notebook 免費課程講授了如何處理這類情形。
如果你的英語不是很熟練,你也可以在中文網站上搜索安裝Anaconda的教程,比如這個知乎帖子
方法 2:安裝 Python
對使用 Python 進行數據分析不感興趣的學員建議采用此方法。
如果你對學習面向數據科學的 Python 不感興趣,并且你的計算機尚未安裝 Python 3,那么現在該安裝 Python 3 了!請轉到?Python 下載頁面并找到適用于你的操作系統、以 3 開頭的最新版本(例如 Python 3.5.2)。
對于 Windows 和 Mac,我們發現最簡單的方法是直接從 Python 下載網站下載安裝程序并運行。如果你使用的是 Linux,Python 下載頁面提供了進行下載和編譯的源代碼。此外,你可以使用 APT 等安裝工具安裝 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 3 了!
運行 Python 腳本
運行 Python 腳本!!
提示:文件下載后,_ 會變成- ,你可能需要改成python first-script.py。
如果你看到終端輸出了以下消息,則表明你成功地運行了腳本:
Congratulations on running this script!!輔助材料
?first_script.py
編程環境設置
配置 Python 編程環境
你已經看到我的設置,現在花時間在你自己的計算機上熟悉下界面。 下面是一些我們推薦的文本編輯器,你可以嘗試一個看看。
對于 Mac:
- Visual Studio Code
- Sublime Text
- TextWrangler
- Atom
- emacs
- vim
對于 Windows:
- Visual Studio Code
- Sublime Text
- Notepad++
- Atom
對于 Linux:
- Visual Studio Code
- Sublime Text
- Atom
- emacs
- vim
設置好屏幕,打開文本編輯器、終端/命令行,并在網絡瀏覽器中打開優達學城課堂,以便與你的 Python 腳本交互。調整顯示器選項,找到你覺得最舒適的顯示效果,并看看能否找到 tab-to-four-spaces 選項 - 該選項對于 Python 縮進來說非常有用。
修改 Python 腳本
自己編寫腳本
在文本編輯器中打開全新的空文件,命名該文件并將其保存到放置 Python 課程文件的文件夾中。將以下代碼放入該文件里。
how_many_snakes = 1 snake_string = """ Welcome to Python3!____/ . .\\\ ---<\ /__________/ / -=:___________/<3, Juno """print(snake_string * how_many_snakes)在腳本中接受原始輸入
我們可以使用內置函數?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)如果用戶輸入?2 * 3,輸出為?6
練習:在腳本中接受原始輸入
練習:生成消息
假設你是一名老師,需要向每位學生發一條消息,提醒他們未交的作業和分數是多少。你知道每名學生的姓名,沒交的作業份數和分數,這些數據保存在了電子表格中,你只需將這些輸入插入你想到的以下消息中即可:
Hi?[insert student name],
This is a reminder that you have?[insert number of missing assignments]?assignments left to submit before you can graduate. Your current grade is?[insert current grade]?and can increase to?[insert potential grade]?if you submit all assignments before the due date.
你可以將此消息復制粘貼后發送給每位學生,并且每次手動插入相應的值。但是你要寫一個程序來幫助你完成這一流程。
寫一個完成以下操作的腳本:
下面是在終端內成功運行該腳本的示例。
錯誤和異常
-
當 Python 無法解析代碼時,就會發生語法錯誤,因為我們沒有遵守正確的 Python 語法。當你出現拼寫錯誤或第一次開始學習 Python 時,可能會遇到這些錯誤。
-
當在程序執行期間出現意外情況時,就會發生異常,即使代碼在語法上正確無誤。Python 有不同類型的內置異常,你可以在錯誤消息中查看系統拋出了什么異常。
Try 語句
我們可以使用 try 語句處理異常。你可以使用 4 個子句(除了視頻中顯示的子句之外還有一個子句)。
- try:這是?try?語句中的唯一必需子句。該塊中的代碼是 Python 在?try?語句中首先運行的代碼。
- except:如果 Python 在運行?try?塊時遇到異常,它將跳到處理該異常的?except?塊。
- else:如果 Python 在運行?try?塊時沒有遇到異常,它將在運行?try?塊后運行該塊中的代碼。
- finally:在 Python 離開此?try?語句之前,在任何情形下它都將運行此?finally?塊中的代碼,即使要結束程序,例如:如果 Python 在運行?except?或?else?塊中的代碼時遇到錯誤,在停止程序之前,依然會執行此finally?塊。
為何在 Python 中需要?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練習解決方案:處理除以零的情形
def create_groups(items, num_groups):try:size = len(items) // num_groupsexcept ZeroDivisionError:print("WARNING: Returning empty list. Please use a nonzero number.")return []else:groups = []for i in range(0, len(items), size):groups.append(items[i:i + size])return groupsfinally:print("{} groups returned.".format(num_groups))print("Creating 6 groups...") for group in create_groups(range(32), 6):print(list(group))print("\nCreating 0 groups...") for group in create_groups(range(32), 0):print(list(group))修改上面的腳本以處理除以零錯誤。正確修改的話,應該會輸出:
Creating 6 groups... 6 groups returned. [0, 1, 2, 3, 4] [5, 6, 7, 8, 9] [10, 11, 12, 13, 14] [15, 16, 17, 18, 19] [20, 21, 22, 23, 24] [25, 26, 27, 28, 29] [30, 31]Creating 0 groups... WARNING: Returning empty list. Please use a nonzero number. 0 groups returned.訪問錯誤消息
在處理異常時,依然可以如下所示地訪問其錯誤消息:
try:# some code except ZeroDivisionError as e:# some codeprint("ZeroDivisionError occurred: {}".format(e))應該會輸出如下所示的結果:
ZeroDivisionError occurred: division by zero因此依然可以訪問錯誤消息,即使已經處理異常以防止程序崩潰!
如果沒有要處理的具體錯誤,依然可以如下所示地訪問消息:
try:# some code except Exception as e:# some codeprint("Exception occurred: {}".format(e))Exception?是所有內置異常的基礎類。你可以在此處詳細了解 Python 的異常。
讀寫文件
以下是如何在 Python 中讀寫文件的方式。
讀取文件
f = open('my_path/my_file.txt', 'r') file_data = f.read() f.close()寫入文件
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__"會檢查該模塊是否為主程序。?
嘗試一下!
下面是我在上述視頻中使用的代碼。請在同一目錄下創建這些腳本,并在終端里運行這些腳本!實驗?if 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 標準庫模塊并解釋為何我們喜歡使用它們!?
- csv:對于讀取 csv 文件來說非常便利?
- collections:常見數據類型的實用擴展,包括?OrderedDict、defaultdict?和?namedtuple
- random:生成假隨機數字,隨機打亂序列并選擇隨機項?
- string:關于字符串的更多函數。此模塊還包括實用的字母集合,例如?string.digits(包含所有字符都是有效數字的字符串)。?
- re:通過正則表達式在字符串中進行模式匹配?
- math:一些標準數學函數?
- os:與操作系統交互?
- os.path:os?的子模塊,用于操縱路徑名稱?
- sys:直接使用 Python 解釋器?
- json:適用于讀寫 json 文件(面向網絡開發)
希望你能用上這些模塊!
導入模塊技巧
還有一些在不同情形下很有用的其他形式的?import?語句。
模塊、軟件包和名稱
為了更好地管理代碼,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?啟動 python 交互式解釋器。你可以接著輸入內容,直接與 Python 交互。這是每次實驗和嘗試一段 Python 代碼的很棒工具。只需輸入 Python 代碼,輸出將出現在下一行。
>>> type(5.23) <class 'float'>在解釋器中,提示符窗口中最后一行的值將自動輸出。如果有多行代碼需要輸出值,依然需要使用 print。
如果你開始定義函數,你將在提示符窗口中看到變化,表示這是可以繼續的行。在定義函數時,你需要自己添加縮進。
>>> def cylinder_volume(height, radius): ... pi = 3.14159 ... return height * pi * radius ** 2解釋器的不足之處是修改代碼比較麻煩。如果你在輸入該函數時出現了拼寫錯誤,或者忘記縮進函數的主體部分,無法使用鼠標將光標點到要點擊的位置。需要使用箭頭鍵在代碼行中來回移動。有必要了解一些實用的快捷方式,例如移到一行的開頭或結尾。
注意,我可以引用我在解釋器中之前定義的任何對象!
>>> cylinder_volume(10, 3) 282.7431一個實用技巧是在交互式提示符窗口中使用上下箭頭鍵循環瀏覽最近的命令。這樣可以重新運行或修改已經嘗試的代碼。
要退出 Python 交互式解釋器,使用命令?exit()?或在 mac/linux 上按下?ctrl+D,在 windows 上按下?ctrl+Z,然后按下?Enter?鍵。
IPython
實際上有一個代替默認 python 交互式解釋器的強大解釋器 IPython,它具有很多其他功能。
- Tab 鍵補充完整
- ?:關于對象的詳細信息
- !:執行系統 shell 命令
- 語法突出顯示
你可以在此處查看更多其他功能!
獲取所需的信息
要想成為熟練的程序員,需要掌握大量知識。需要了解庫、記住語法以及其他細節。此外,讓這一切更具挑戰的是,技術在不斷革新,因為新的技巧和工具會不斷出現。
對于編程新手來說,學習所有這些細節并及時獲悉新的發展動態似乎是一項不可能完成的任務。的確是這樣!具有多年經驗的編程專業人士實際上并不是在腦中記下百科全書一樣的知識,而是掌握了快速查找信息的技巧。
如何搜索
下面是高效網絡搜索的一些技巧:
- 在查詢時,嘗試使用 Python 或要使用的庫的名稱作為第一個字詞。這樣會告訴搜索引擎優先顯示與你要使用的工具明確相關的結果。
- 創建良好的搜索查詢需要多次嘗試。如果第一次嘗試時沒有找到有用的結果,再試一遍。?
- 嘗試使用在一開始搜索時發現的網頁上發現的關鍵字,使搜索引擎在后續搜索中轉到更好的資源。
- 復制粘貼錯誤消息作為搜索字詞。這樣會出現錯誤解釋性信息和潛在原因。錯誤消息可能包括你所寫的特定行號引用。只在搜索中包含這些信息之前的錯誤消息部分。
- 如果找不到問題答案,自己提出問題!StackOverflow 等社區有一些行為規則,如果你要加入該社區,必須了解這些規則,但是別因為這些規則而不愿意使用這些資源。
在線資源的優先級
雖然有很多關于編程的在線資源,但是并非所有資源都是同等水平的。下面的資源列表按照大致的可靠性順序排序。
總結
以上是生活随笔為你收集整理的python脚本编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: axure 8 表格合并_Excel表格
- 下一篇: python语言程序设计二级教程pdf_