1.什么是文件?
硬盤上存儲的數據都是以文件的形式來組織的~
文件是數據在硬盤上的存儲形式,不同的數據在硬盤上的存儲形式是不同的,
2.文件路徑
文件夾/目錄。
文件夾,再包含文件夾的情況,這就是一個嵌套的關系,
此處把這一層一層的目錄構成的字符串,就稱為“文件的路徑”
為了表示qq.exe這個文件的位置,就可以通過路徑的方式來表示。
在代碼中兩個反斜杠才代表一個字符\
在代碼中一個反斜杠表示的是特定含義的轉義字符~
3.文件操作
1.打開文件
open函數的返回值是一個文件對象,此處的f相當于是file的縮寫,表示這個函數的返回值是一個文件對象,
當使用print函數去輸出f,就是輸出open函數的結果是,會發現這時會顯示文件的路徑,文件的打開方式,以及文件的編碼方式,當使用print(type(f))去打印open函數的結果類型時,會發現python內部給這個文件起了一個名字。
當文件不存在時,按照讀方式打開文件,就會拋出文件沒找到的異常。
重點理解open函數的返回值是什么?
對文件對象的操作都會直接反映到硬盤上,
2.關閉文件
文件在打開完之后,使用完了之后,也就一定要關閉!
打開文件,其實是在申請一定的系統資源~
不再使用文件的時候,資源就應該及時釋放
否則就可能造成文件資源泄露,進一步的導致其他部分的代碼無法順利打開文件了
正是因為一個系統的資源是有限的,因此一個程序能打開的文件的個數,也是有上限的!
在8189+3=>8192的過程中,這默認打開的三個文件是標準輸入,標準輸出,標準錯誤,
每個程序在啟動的時候,都會默認打開三個文件~
1.標準輸入, 鍵盤 input
2.標準輸出,顯示器 print
3.標準錯誤,顯示器?
文件資源泄露,其實是一個挺重要的問題~
不會第一時間暴露出來,而是在角落里,冷不丁偷襲一下,~
3.寫文件
如上圖所示,如果使用讀的方式去往文件中編寫內容,會直接拋出異常。
如上圖所示,如果使用寫的方式打開文件,不去寫也不去進行任何的操作,會直接清空文件中的原本內容。
如果想在文件中追加內容并且原本文件中就有內容,就要使用a的方式去以追加的形式往文件中添加內容。
當然了如果想加入換行的效果,就需要在f.write("464"\n)加入換行符即可,這樣讓文件內容看起來更加簡潔。
如上圖所示,如果當文件對象已經被關閉時,那么意味著系統中該文件相關的內存資源已經釋放了,強行去寫,就會出異常。
4.讀文件
如上圖所示,python代碼嘗試將文件中的數據按照一個GBK的方式去解析,結果發現解析不了,?
如何指定讓代碼以utf8的方式去解析文件中的數據信息呢?
就是在open函數中添加encoding=“utf8”這個關鍵字參數,指定open函數以utf8的形式去讀取文件中的信息。
實際開發的過程中就需要保證,文件內容的編碼方式和代碼中操作文件的編碼方式,匹配!
相比于GBK,utf8是更廣泛的編碼方式。
如上圖所示,更加常見的需求是按行來讀取文件內容,
最簡單的方法,直接是使用for循環。
for line in f :
? ? print(f'line = {line}')
然后記得要關閉文件,歸還占用的文件資源哦!