Python檔案和異常
開始Python的複習!(以前學的忘了好多-_-)
主要參考的是Github上的一個專案:https://github.com/jackfrued/Python-100-Days
文章主要是對該專案中的內容進行學習 穿插一點自己的學習想法等內容~
檔案和異常
在Python中實現檔案的讀寫主要是通過內建的open函式,可以指定檔名、操作模式、編碼資訊來獲得操作檔案的物件,然後對檔案進行讀寫操作。
操作模式 | 具體含義 |
---|---|
'r' |
讀取 (預設) |
'w' |
寫入(會先截斷之前的內容) |
'x' |
寫入,如果檔案已經存在會產生異常 |
'a' |
追加,將內容寫入到已有檔案的末尾 |
'b' |
二進位制模式 |
't' |
文字模式(預設) |
'+' |
更新(既可以讀又可以寫) |
讀取txt文字檔案
注意錯誤捕捉!!!
def main(): f = None try: f = open('致橡樹.txt', 'r', encoding='utf-8') print(f.read()) except FileNotFoundError: print('無法開啟指定的檔案!') except LookupError: print('指定了未知的編碼!') except UnicodeDecodeError: print('讀取檔案時解碼錯誤!') finally: if f: f.close() if __name__ == '__main__': main()
在Python中,可以將那些在執行時可能會出現狀況的程式碼放在try中,在try後邊加上一個或多個except來捕獲可能的異常情況。在上文的程式碼塊中,使用三個except來捕捉錯誤,最後使用family程式碼塊來關閉開啟的檔案。
注意:finally程式碼塊不論程式是否正常都會被執行(甚至呼叫sys模組的exit函式退出Python環境,finally塊都會被執行)
如果不願意在finally
程式碼塊中關閉檔案物件釋放資源,也可以使用上下文語法,通過with
關鍵字指定檔案物件的上下文環境並在離開上下文環境時自動釋放檔案資源,程式碼如下所示。
def main(): try: with open('致橡樹.txt', 'r', encoding='utf-8') as f: print(f.read()) except FileNotFoundError: print('無法開啟指定的檔案!') except LookupError: print('指定了未知的編碼!') except UnicodeDecodeError: print('讀取檔案時解碼錯誤!') if __name__ == '__main__': main()
除了使用檔案物件的read
方法讀取檔案之外,還可以使用for-in
迴圈逐行讀取或者用readlines
方法將檔案按行讀取到一個列表容器中,程式碼如下所示。
import time
def main():
# 一次性讀取整個檔案內容
with open('致橡樹.txt', 'r', encoding='utf-8') as f:
print(f.read())
# 通過for-in迴圈逐行讀取
with open('致橡樹.txt', mode='r') as f:
for line in f:
print(line, end='')
time.sleep(0.5)
print()
# 讀取檔案按行讀取到列表中
with open('致橡樹.txt') as f:
lines = f.readlines()
print(lines)
if __name__ == '__main__':
main()
同理還會有對二進位制檔案的讀取,與上述方法類似,在模式引數那裡改一改就好。
重點介紹一些JSON格式檔案的讀取。
這類檔案主要用來儲存一個列表或一個字典中的資料。JSON是“JavaScript Object Notation"的縮寫,本來是JavaScript語言中建立物件的一種字面量語法,現在已經被廣泛應用於跨平臺跨語言的資料交換。目前JSON已經取代XML作為異構系統間教化資料的事實標準。
更多參見JSON的官方網站:http://json.org
我們使用Python中的json模組就可以將字典或列表以JSON格式儲存到檔案中,程式碼如下所示。
import json
def main():
mydict = {
'name': '駱昊',
'age': 38,
'qq': 957658,
'friends': ['王大錘', '白元芳'],
'cars': [
{'brand': 'BYD', 'max_speed': 180},
{'brand': 'Audi', 'max_speed': 280},
{'brand': 'Benz', 'max_speed': 320}
]
}
try:
with open('data.json', 'w', encoding='utf-8') as fs:
json.dump(mydict, fs)
except IOError as e:
print(e)
print('儲存資料完成!')
if __name__ == '__main__':
main()