Python使用open函數(shù)的buffering設(shè)置文件緩沖方式
如何設(shè)置文件的緩沖
實際案例
將文件內(nèi)容寫到硬件設(shè)備時,使用系統(tǒng)調(diào)用,這類I/O操作的時間很長。
為了減少I/O操作的次數(shù),文件通常使用緩沖區(qū)。
(有足夠多的數(shù)據(jù)才進行系統(tǒng)調(diào)用)文件的緩沖行為,分為全緩沖、行緩沖、無緩沖。
如何設(shè)置python中文件對象的緩沖行為?
python文件對象默認(rèn)的緩沖行為4個字節(jié)(4096)
解決方案
- 全緩沖:open函數(shù)的buffering設(shè)置為大于1的整數(shù)n,n為緩沖區(qū)大小。
- 行緩沖:open函數(shù)的buffering設(shè)置為1 。
- 無緩沖:pen函數(shù)的buffering設(shè)置為0。
注意:
都是在python交互模式下進行的操作,如果是用腳本,腳本運行完關(guān)閉文件對象,緩沖區(qū)內(nèi)容就會寫到磁盤中,這樣就觀察不了緩沖區(qū)不同大小的行為了。
文件緩沖介紹?
對于磁盤這類的塊設(shè)備,它的讀寫不是一個字節(jié)一個字節(jié)完成的,而是按塊每次讀寫一個塊,假設(shè)一個塊的大小是4096個字節(jié),那就意味著寫入一個字節(jié)和寫入4096個字節(jié)都需要一次I/O操作,它們的用時是相同的。
在這種情況為了提高效率就要減少I/O操作的次數(shù),使用的手段就是為文件設(shè)立一個緩沖區(qū)。
當(dāng)需要寫入的字節(jié)數(shù)不足一個塊設(shè)備大小的時候,那么都放入緩沖區(qū)當(dāng)中,湊夠一個塊的大小才調(diào)用一次系統(tǒng)調(diào)用。
- 全緩沖就是緩沖區(qū)有一定大小滿足那個數(shù)量就進行一次系統(tǒng)調(diào)用;
- 行緩沖就是碰到一個換行符就進行一次輸出也就是一次系統(tǒng)調(diào)用;
- 無緩沖就是不希望有緩沖的實時寫入到文件,如串口設(shè)備,需要及時的發(fā)送到串口上去。
代碼演示
f = open('open.txt', 'wb') ''' 使用tail -f open.txt,實時查看文件內(nèi)容, python交互模式下,輸入以下內(nèi)容,查看寫入4096個字節(jié)前后輸出變化。 ''' f.write(b'abc') f.write(b'+' * 4093) f.write(b'-') ''' 普通文件默認(rèn)的緩沖行為,緩沖區(qū)的大小4096,是根據(jù)平臺和 塊設(shè)備自身的屬性相關(guān)。在某些情況下想改變緩沖區(qū)的大小應(yīng)該怎么做? 通過open函數(shù)buffering參數(shù)設(shè)置緩沖大小。 ''' # 設(shè)置全緩沖區(qū)的大小為2048 f2 = open('demo2.txt', 'wb', buffering=2048) f2.write(b'+' * 1024) f2.write(b'+' * 1023) f2.write(b'-' * 2) # 設(shè)置行緩沖,buffering為1 f3 = open('demo3.txt', 'wb', buffering=1) f.write(b'abc') f.write(b'123') f.write(b'\n') # 無緩沖,buffering為0 f4 = open('demo4.txt', 'wb', buffering=0) f4.write(b'a') f4.write(b'1234')
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
PyQt5基本控件使用之消息彈出、用戶輸入、文件對話框的使用方法
本文主要介紹PyQt界面實現(xiàn)中常用的消息彈出對話框、提供用戶輸入的輸入框、打開文件獲取文件/目錄路徑的文件對話框。 本文主要針對這三種控件的主要場景進行介紹。感興趣的朋友跟隨小編一起看看吧2019-08-08Windows下安裝python MySQLdb遇到的問題及解決方法
這篇文章主要介紹了Windows下安裝python MySQLdb遇到的問題及解決方法,需要的朋友可以參考下2017-03-03python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說明
這篇文章主要介紹了python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python實現(xiàn)對比兩個Excel數(shù)據(jù)內(nèi)容并標(biāo)記出不同
日常工作中需要對比兩個Excel工作表中的數(shù)據(jù)差異是很不方便的,使用python來做就比較簡單了!本文為大家介紹了python實現(xiàn)對比兩個Excel的數(shù)據(jù)內(nèi)容并標(biāo)記出不同數(shù)據(jù)的示例代碼,需要的可以參考一下2022-12-12