了解變數資料類型操作之後,接下來介紹程式輸入與輸出,輸入將資料從外部讀入程式中,課程將介紹 使用者輸入-input()、錯誤處理-try except finally、輸出-print()、讀取檔案-read()、readline()、readlines()、寫入檔案-write()、writelines()、requests模組、JSON模組
。
Python input()用於讀取使用者輸入,直到使用者按下Enter鍵,使用方次包含 input()或input('提示文字')
,input()傳回文字。
x=input() print(int(x)*10) y=int(input('請輸入整數:')) print(y*10)
錯誤處理-try except finally
用於設定錯誤檢查,try
區域用於執行可能會發生錯誤的程式區塊,except
區域用於設定當 try
發生錯誤時要執行的程式區塊,finally
區域用於設定不論是否發生錯誤都要執行的程式區塊。except
偵測錯誤類型如下圖:
請執行先前輸入數字練習,輸入文字後發生 ValueError
錯誤,當我們將程式加入錯誤檢查,當使用者輸入錯誤時,程式會執行 except
區塊,如果使用者不清楚錯誤類型,則不須設定錯誤類型,僅使用 except
即可。
try: x=input() print(int(x)*10) except ValueError: print('請輸入整數')
輸出方式包含 print(變數)、print('{}'.format(變數))、print(f'{變數}')
,建議使用 print(f'{變數}')
進行輸出,請注意變數後可接 資料類型操作中格式化輸出。
print(f'{" "*5}*') print(f'{" "*4}{"*"*3}') print(f'{" "*3}{"*"*5}') print(f'{" "*2}{"*"*7}') print(f'{" "*1}{"*"*9}') print(f'{" "*0}{"*"*11}')
資料輸入除來自使用者,還有包含檔案,檔案讀入函數包含 read()、readline()、readlines()
,執行檔案讀入之前,使用必須先開啟檔案(open()函數
),讀入完畢後,必須關閉檔案(close()函數
)。
open('檔案位置/名稱','檔案模式',encoding='檔案編碼')
:檔案位置/名稱
為輸入檔案相對於python程式的相對位置與檔名,下列範例將資料檔案 test.txt 置於files檔案夾中。檔案模式包含 r、w、a、x、t、b
, r
代表唯讀(如果讀取檔案不存在會產生錯誤)、w
代表寫入(如果讀取檔案不存在會建立新檔案,如果檔案存在,會清除檔案內容)、a
代表新增(如果讀取檔案不存在會建立新檔案,如果檔案存在,不會清除檔案內容)、x
代表建立檔案(如果讀取檔案存在,會生錯誤)、t
代表文字檔案、b
代表二進制檔案。編碼模式常用為 utf-8
。請注意:open()函數會傳回檔案物件
。
f=open('files/test.txt','rt',encoding='utf-8') f.close()
read()
:read()函數可以代入讀取大小,如果未代入大小,則全部讀取。
f=open('files/test.txt','rt',encoding='utf-8') print(f.read()) f.close() f=open('files/test.txt','rt',encoding='utf-8') print(f.read(4)) f.close()
readline()
:readline()函數讀取一整行。請注意readline()傳回值會包含跳行符號。如果要移除讀入資料的跳行符號,可以使用字串 splitlines()
函數。
f=open('files/test.txt','rt',encoding='utf-8') print(f.readline()) f.close()
readlines()
:readlines()函數讀取全部並將每一行以清單項目傳回。
f=open('files/test.txt','rt',encoding='utf-8') print(f.readlines()) f.close()
使用系統資源操作(如檔案),當使用者不再需要時,必須釋放資源(如檔案close()),如果使用者忘了釋放資源,最終系統有可能會耗盡資源(記憶體)。為了避免使用者忘了釋放資源,Python可以使用 with 資源操作命令 as 變數
,當使用者結束with程式區塊時,系統資源就會被釋放。請注意:with命令可搭配 try except。
with open('files/test.txt','rt',encoding='utf-8') as f: print(f.readlines())
如同檔案讀取,write()
用於將代入內容寫入檔案,而 writelines()
用於將清單字串寫入檔案。
with open('files/test2.txt','wt',encoding='utf-8') as f: f.write('南臺科技大學\n') f.writelines(['資訊管理系\n','資管一甲'])
資料輸入另一個方式是從網路取得資料,我們將藉由 requests
模組,透過http取得網路資料,要使用 requests模組我們必須先安裝Python套件安裝程式(pip),請在命令提示字元視窗中執行下列命令來安裝 pip:
py -m pip install --upgrade pip
安裝完 pip 之後,請在命令提示字元視窗中執行 py -m pip install "requests"
來安裝requests模組。安裝之後,請使用 from pip._vendor import requests
在程式匯入 requests模組。透過 requests.ger(url:'資料API網址')
存取網路資源,傳回物件屬性 status_code
傳回網路存取狀態(例如值為200代表成功,404代表找不到等),臺南市公有免費停車場開放資料為例(https://citypark.tainan.gov.tw/App/parking.ashx?verCode=5177E3481D&type=1&ftype=1&exportTo=2),因為傳回值為JSON清單,因此程式範例除匯入 requests 模組外,另外還使用系統內建 json 模組。
from pip._vendor import requests import json r=requests.get(url='https://citypark.tainan.gov.tw/App/parking.ashx?verCode=5177E3481D&type=1&ftype=1&exportTo=2') data=r.json() print(data)
JSON格式同Python中字典類型(dictionary),常用函數包含 json.loads()、json.dumps()
,json.loads(同json())將字串格式JSON值轉為JSON物件,而json.dumps()將JSON物件轉為字串格式JSON值(請設定 ensure_ascii=False)。
import json data=json.loads('{"name":"南台科技大學"}') print(data) print(json.dumps(r,ensure_ascii=False))
當程式需進行條件判斷時會使用條件 if
,Python條件設定有下列三種模式:
if 條件: 條件對執行命令
if 條件: 條件對執行命令 else: 條件錯執行命令
if 條件1: 條件1對執行命令 elif 條件2: 條件2對執行命令 elif 條件3: 條件3對執行命令 else: 先前條件都錯執行命令
當程式需重複執行時會使用迴圈,Python迴圈設定有下列二種模式:for迴圈與while迴圈,for迴圈用於順序資料,while迴圈則當條件為真時重複執行。
for i in range(0,9): 迴圈執行命令(共9次)
while 條件: 迴圈執行命令
迴圈通常會搭配兩個命令 break、continue
,break
用於跳出現在的迴圈,continue
用於停止繼續執行接下的迴圈命令,回到迴圈的開使,繼續下一個迴圈命令。