Python學習(9)——IO程式設計
阿新 • • 發佈:2018-11-16
1、檔案讀寫
(1)由於檔案讀寫時都有可能產生IOError
,一旦出錯,後面的f.close()
就不會呼叫。所以,為了保證無論是否出錯都能正確地關閉檔案,我們可以使用try ... finally
來實現:
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
每次都這麼寫實在太繁瑣,所以,Python引入了with
語句來自動幫我們呼叫close()
方法:
with open('/path/to/file', 'r') as f: print(f.read())
(2)讀資料方法:
read(),read(size),readline(),readlines()
(3)字元編碼:
open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
(4)寫檔案:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
2、操作檔案和目錄
(1)把兩個路徑合成一個時,不要直接拼字串,而要通過os.path.join()
(2)要拆分路徑時,也不要直接去拆字串,而要通過os.path.split()
函式,這樣可以把一個路徑拆分為兩部分,後一部分總是最後級別的目錄或檔名
(3)shutil
模組提供了copyfile()
的函式用於複製檔案
(4)列出當前目錄下的所有目錄,只需要一行程式碼:
[x for x in os.listdir('.') if os.path.isdir(x)]
要列出所有的.py
檔案,也只需一行程式碼:
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
3、序列化
(1)Python提供了pickle
模組來實現序列化
(2)pickle.dumps()
方法把任意物件序列化成一個bytes,
然後就可以把這個bytes
寫入檔案
(3)pickle.dump()
直接把物件序列化後寫入一個file-like Object
(4)pickle.loads()
方法反序列化出物件,也可以直接用pickle.load()
方法從一個file-like Object
中直接反序列化出物件
(5)Python內建的json
模組提供了非常完善的Python物件到JSON格式的轉換,呼叫方法與pickle類似