Python3 自學第14天:文件操作,文件句柄,上下文管理器

Python3 自學第14天:文件操作,文件句柄,上下文管理器

前面我們瞭解了Python的異常處理和自定義異常,今天我們瞭解下Python的文件操作;

首先Python對文件的處理並不是直接操作的,而是去調用操作系統接口方法間接操作文件的,這樣做的目的是為了確保操作系統安全性。

1.文件讀寫操作:open函數

格式:
open(file, mode='r',
encoding=None, buffering=-1,
errors=None, newline=None,
closefd=True, opener=None)
比較常用的是前四個:
file: 必需,文件相對或者絕對路徑
mode: 可選,文件打開模式
encoding: 一般使用utf8
buffering: 設置讀取文件的緩衝區,是一段內存區域。

文件寫操作: 'w'(w:write)

Python3 自學第14天:文件操作,文件句柄,上下文管理器

使用'w'寫模式時,如果文件不存在,open()會創建一個新文件。

如果修改上面寫入的數據再次執行代碼,會發現文件內容是最新的數據,並不會保留之前已經寫入的數據。

如果出現亂碼了,你需要設置encoding='utf-8'參數。

注意:打開文件並寫入數據的時候,並不是立馬就寫入到磁盤文件中,而先寫入內存緩衝區中,然後再寫入文件。

write():將字符串寫入文件,返回的是寫入的字符長度。

writelines(sqe):將一個序列字符串列表寫入文件中,實例代碼:

Python3 自學第14天:文件操作,文件句柄,上下文管理器

文件讀操作:'r'(r:read)

Python3 自學第14天:文件操作,文件句柄,上下文管理器

如果文件不存在,用'r'讀模式是會報錯的

Python3 自學第14天:文件操作,文件句柄,上下文管理器

文件存在時,運行結果:

Python3 自學第14天:文件操作,文件句柄,上下文管理器

read() 讀取所有數據

read(size) 每次讀多少個字節數據

readline() 每次讀取一行

readlines() 讀取所有行並返回列表

readlines(size) 每次讀取多行數據

2. 操作模式

上面我們已經瞭解了文件的'r'和'w'兩種操作模式,我們再詳細說下其它操作模式。

追加模式: 'a'(a:append),這種模式數據會被追加到末尾,不會覆蓋上次寫的數據。

Python3 自學第14天:文件操作,文件句柄,上下文管理器

文件加號+ 模式:一般與其它操作模式組合使用表示更新操作

r+ 可讀也可寫,不存在會報錯

w+ 可讀也可寫,不存在會創建文件

a+ 可讀也可寫,不存在會創建文件

w+ 和 a+區別:開始寫數據的位置不同。

注意:w+ 模式每次執行都會建一個新文件,如果打開已存在的文件,原有文件內容會被刪除的。

Python3 自學第14天:文件操作,文件句柄,上下文管理器

二進制模式:'b'(b:binary)

open()文件操作默認為文本模式,如果操作二進制文件(如:圖片)加上 b 就可以了;

如:rb+ wb+ ab+

注意了,文件操作完後一定要記得調用close()函數關閉文件流。

3. 異常處理

Python3 自學第14天:文件操作,文件句柄,上下文管理器

4. 文件句柄

文件句柄,這個詞聽起來很抽象,讓人有種距離感,其實就是上面open()函數返回的文件對象 f,Python中一切皆對象),這樣理解就簡單多了。

實例代碼:

Python3 自學第14天:文件操作,文件句柄,上下文管理器

5. 上下文管理器 with

格式:
with open() as 別名 :

這樣會讓代碼簡單清晰,最關鍵省去了文件操作完畢後close()函數的顯示調用,實例代碼:

Python3 自學第14天:文件操作,文件句柄,上下文管理器

6.文件指針移動

Python3 自學第14天:文件操作,文件句柄,上下文管理器

Python3 自學第14天:文件操作,文件句柄,上下文管理器

上面的實例中,第一次read()時,tell為22,說明在追加模式下指針這會在文件結尾處,所以讀取不到數據。

seek(offset[, whence])

移動文件讀取指針到指定位置。

offset:開始的偏移量,如果是負數表示從倒數第幾位開始。

whence:表示要從哪個位置開始偏移,

0 代表從文件開頭開始算起,默認值

1 代表從當前位置開始算起,

2 代表從文件末尾算起;

python文件操作就瞭解到這裡,大家有什麼問題請在評論區裡留言,下次我們開始正式學習面向對象編程,歡迎大家多多關注!

上一篇:

【極客乾貨】從事IT行業十餘年,在移動互聯網開發,J2EE企業級開發,IOT物聯網,AI人工智能等方面有點技術積累,熟練使用C/C++,Java,Python等編程語言。從2009年開始接觸Python,後續借空閒時間將個人熟悉的技術乾貨系統性分享給大家,也許我的分享會讓你少走一些彎路,如果您覺得還可以,請多多關注,評論和轉發,非常感謝!


分享到:


相關文章: