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 ...