Python學習筆記(9) IO程式設計

2021-08-31 23:40:01 字數 1694 閱讀 5675

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

python淺學筆記9 IO程式設計

stringio和bytesio 操作檔案和目錄 序列化 pickling name input output face 磁碟,網路 model stream 流 from to 記憶體 time stop?同步 非同步 由於非同步io比較複雜,本章都是同步io,非同步io在後邊網路伺服器提及。開啟...

python學習筆記 IO程式設計

由於cpu和記憶體的速度遠遠高於外設的速度,所以,在io程式設計中,就存在速度嚴重不匹配的問題。舉個例子來說,比如要把100m的資料寫入磁碟,cpu輸出100m的資料只需要0.01秒,可是磁碟要接收這100m資料可能需要10秒,怎麼辦呢?有兩種辦法 第一種是cpu等著,也就是程式暫停執行後續 等10...

python學習筆記 九 IO程式設計

一.檔案讀寫 1.讀檔案 try f open d 1.txt r 讀取普通檔案 f open d 1.jpg rb 讀取二進位制檔案 f.read finally if f f.close with open d 1.txt r as f 使用with會自動呼叫close for line in ...