1. 程式人生 > >Python學習(9)——IO程式設計

Python學習(9)——IO程式設計

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類似