學(xué)習(xí)處理文件;
學(xué)習(xí)錯誤處理;
學(xué)習(xí)異常;
學(xué)習(xí)模塊json,能夠保存用戶數(shù)據(jù)
10.1 從文件中讀取數(shù)據(jù)
可以一次性讀取文件的全部內(nèi)容,也可以每次一行的方式逐步讀取
10.1.1 讀取整個文件
with open('xxx') as file_object: #這里的xxx是文件名
? ? contents = file_object.read()
? ? print(contents.rstrip())
rstrip()方法可以刪除右邊;strip()可以刪除左右兩邊
10.1.2 文件路徑
一般講數(shù)據(jù)文件存儲在程序文件所在目錄,或者存儲在程序文件所在目錄的文件夾內(nèi).
with open('text_files\filename.txt') as file_object: #這里的text_files就是程序文件所在目錄的文件夾名
注意這里windows系統(tǒng)是\,linux和OS X中是/
10.1.3 逐行讀取
filename = 'xxx' #將讀取的文件名稱存儲在變量中
with open(filename) as file_object:
? ? for line in file_object: #for循環(huán)
? ? ? ? print(line.rstrip()) #刪除左右兩邊的指定元素,這里是空格
10.1.4 創(chuàng)建一個包含文件各行內(nèi)容的列表
open關(guān)鍵字,open()返回的文件對象只在with代碼塊內(nèi)可用
with 關(guān)鍵字后:
? ? lines = file_object.readlines()?
for line in lines:
? ? print(line.rstrip)
10.2 寫入文件
10.2.1 寫入空文件
讀取模式 r
寫入模式 w
附加模式 a
若省略模式實參,python將默認已只讀模式打開文件
filename = ‘xxx’
with open(xxx, 'w') as file_object:
? ? file_object.write('yyy')
如果要寫入的文件不存在,函數(shù)open()會自動創(chuàng)建它;
另外以寫入模式打開文件時若指定文件已經(jīng)存在,puthon將在返回文件對象前清空該文件
10.2.2 寫入多行
函數(shù)write()不會換行,需要加轉(zhuǎn)行符\n
10.2.3 附加到文件
將'w'替換為'a'即可
10.3 異常
try-except-else代碼塊
即便出現(xiàn)異常,程序也將繼續(xù)運行:顯示你編寫的友好錯誤信息,而不是traceback
10.3.1 處理ZeroDivisionError
try:
? ? '可能引發(fā)錯誤的代碼'
except ZeroDivisionError:
? ? '提示出現(xiàn)該異常該怎么辦的代碼'
else:
? ? 'try的代碼成功執(zhí)行'
10.3.2 處理FileNotFoundError異常
with open(filename) as f_obj:
? ? content = f_obj.read()
python無法讀取不存在的文件.這個錯誤是open()函數(shù)導(dǎo)致的,因此
try語句要放在open()代碼行之前
try:
? ? with open(filename) as f_obj:
? ? ? ? content = f_obj.read()
except FileNotFoundError:
? ? '代碼行'
10.3.3 分析文本
filename.split()
有些單詞可能包含標(biāo)點
10.3.4 pass語句
except ?FileNotFoundError:
? ? pass
這種語句讓錯誤發(fā)生時,不出現(xiàn)traceback,也不會有任何輸出;
另外pass語句還充當(dāng)了占位符
10.4 存儲數(shù)據(jù)
使用模塊json
10.4.1 json.dump()和json.load()
import json
numbers = [2, 3, 5, 8, 13]
filename = 'numbers.json' #通常使用.json的擴展名來指出數(shù)據(jù)存儲為JSON格式
with open(filename, 'w') as f_obj: #寫入模式打開文件
? ? json.dump(numbers, f_obj) #函數(shù)json.dump()存儲
import json
filename = 'numbers.json'
with open(filename) as f_obj:
? ? numbers = json.load(f_obj) #json.load()函數(shù)加載存儲在JSON中的信息
print(numbers)
10.4.2 保存和讀取用戶生成的數(shù)據(jù)
防止在程序停止運行時,用戶的信息丟失
10.4.3 重構(gòu)
?改進代碼:將代碼劃分為一系列完成具體工作的函數(shù)