python09_文件操做

文件:存放在外部介質(如硬盤,U盤)上的一組完整信息的集合。這些信息可爲各類文字、 圖形、圖像、電影、音樂,甚至包括病毒程序等。python

兩種重要的文件類型:
1.文本文件(Text File)
可直接閱讀,使用記事本打開就能看到文件的內容。
2.二進制文件(Binary File)
將數據按照它的二進制編碼形式存儲。如BMP。因爲文件內容是二進制編碼,使用記事本打開顯然是亂碼,BMP可用圖片查看器解碼。緩存

文本文件與二進制文件的優缺點:
python09_文件操做
不管什麼類型的文件,在硬盤/內存=>二進制
文本方式讀:內存---->看(轉換)
二進制方式讀:內存--->看到一致ide

python3中的字符串類型:
1)bytes-->str : decode("utf8")
2)str-->bytes : encode("utf8")
PS:encode編碼時可指定任何合適的編碼方式,但decode解碼時,必定須要對應的編碼方式函數

文件緩衝區:計算機系統爲要處理的文件在內存中單獨開闢出來的一個存儲區間,在讀寫該文件時,做爲數據交換的臨時「存儲中轉站」。
緩衝機制的好處:可以有效減小對外部設備的頻繁訪問,減小內存與外設間的數據交換,填補內、外設備的速度差別,提升數據讀寫的效率。編碼

訪問文件操做過程:打開文件->讀取文件---將信息讀到內存->寫入文件->關閉文件----保存文件並釋放內存空間
打開文件(open)-----內建函數
python09_文件操做
• file : 要打開的文件名( str )
• mode: 打開文件的方式( str ) => text, bytes
• encoding: 文件編碼方式(str)
• errors: 當發生編碼錯誤時的處理方式(str) 'ignore'或'strict'(默認)
• buffering: 緩存方式 ( int)操作系統

buffer補充:
(轉載出處:https://blog.csdn.net/uytrrfg/article/details/83583169))
參數buffering是一個可選的參數,用來表示緩衝區的策略選擇。設置爲0時,表示不使用緩衝區,直接讀寫,僅在二進制模式下有效。設置爲1時,表示在文本模式下使用行緩衝區方式。設置爲大於1時,表示緩衝區的設置大小。若是參數buffering沒有給出,使用默認時,會採用下面策略來選擇:
1)對於二進制文件模式時,採用固定塊內存緩衝區方式,內存塊的大小根據系統設備的分配的磁盤塊來決定,若是獲取系統磁盤塊的大小失敗,就使用內部常量io.DEFAULT_BUFFER_SIZE定義的大小。通常的操做系統上,塊的大小是4096或者8192字節大小。
2)對於交互的文本文件(採用isatty()判斷爲True)時,採用一行緩衝區的方式。其它文本文件使用跟二進制同樣的方式。.net

打開文件-文件編碼
• encoding: 文件的編碼方式( str )
• encoding的默認值:None, 不一樣的平臺打開的方式不同code

常見編碼
python09_文件操做對象

判斷文件編碼-chardet模塊
安裝:pip install chardet
檢測:python09_文件操做blog

打開文件-模式mode
python09_文件操做

關閉文件-with語句(with會幫忙管理這個文件的close狀況)
python09_文件操做

讀取文件內容
python09_文件操做
如:f.seek(4,0)重置光標位置,表示光標重置到0位置時偏移4個位置開始讀寫等操做
f.readlines()表示將當前位置到文末讀取的文件內容以列表的格式輸出
f.readline()表示將當前內容到行末的內容打印出來

寫文件:f.write('something')
爲何不實時寫入磁盤:硬盤是慢設備,頻繁讀寫會增大磁盤壓力,產生瓶頸
何時會寫入磁盤(即何時會關閉):
• f.flush() -----強制刷新
• f.close() -----關閉文件
• buffer設置(默認:io.DEFAULT_BUFFER_SIZE )
• 0 => 實時寫入 (binary mode)
• 1 => 行緩存 ( text mode) => \n
• 其餘數字n => 緩衝區大小n : 2*4096

文件對象其餘方法:
python09_文件操做

相關文章
相關標籤/搜索