如何設定檔案的緩衝
實際案例
將檔案內容寫入到硬體裝置時,使用系統呼叫,這類I/O操作的時間很長。為了減少I/O操作的次數,檔案通常使用緩衝區,當有足夠多的資料時才進行系統呼叫。檔案的緩衝行為,分為全緩衝、行緩衝和無緩衝。
那麼如何設定Python中檔案物件的緩衝行為?
解決方案:
- 全緩衝:open函式的buffering設定為大於1的整數n,n為緩衝區大小
- 行緩衝:open函式的buffering設定為1
- 無緩衝:open函式的buffering設定為0
全緩衝程式碼如下:
# -*- coding: utf-8 -*-
# 全緩衝
f = open('demo_1.txt', 'w', buffering=1024)
f.write('abc')
注:此處不能呼叫close(),因為一旦呼叫該方法,我們不能對檔案進行讀寫操作,進而緩衝區中的資料會在檔案讀寫許可權關閉之前將資料寫入檔案,致使我們設定檔案的緩衝的目的失敗。
執行上述程式碼,我們開啟demo_1.txt檔案檢視是否寫入資料。不出意外,我們開啟該檔案是看不到“abc”的這三個字母的。為了驗證我們的緩衝區是否設定成功,我們在上述程式碼的基礎上新增如下程式碼:
f.write("*" * 1021)
我們再執行一下,開啟demo_1.txt檔案發現仍舊是空檔案。我們再來看看程式碼,現在我們使用了1024B,這時我們只要再寫入一個字元,之前緩衝區中的資料就會寫入檔案。不妨嘗試一下,我們繼續新增如下程式碼:
f.write("+")
執行程式並開啟demo_1.txt檔案,我們發現其內容如下:
abc*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
這時,我們可以發現在檔案內容中並沒有我們最後新增的“+”。因此,我們可以斷定當我們輸入的資料大於緩衝區n的大小時,Python會將緩衝區n大小的資料寫入檔案中,為後面我們輸入的資料騰出空間進行快取。
行緩衝程式碼如下:
# 行緩衝
f = open('demo_2.txt', 'w', buffering=1)
f.write("abcd")
f.write("123456")
執行上述程式碼並開啟demo_2.txt檔案發現該檔案為空檔案。既然是行緩衝,我們猜想是不是要換行才會將緩衝區的資料寫入檔案。因此,我們新增如下程式碼:
f.write("\n")
這時,我們開啟demo_2.txt檔案就可以看到我們輸入的資料了。
注:行緩衝一般用於“互動式”文字檔案,在Windows系統本人未成功實現行緩衝程式碼功能,但在Linux系統下成功實現行緩衝程式碼功能。
無緩衝程式碼如下:
# 無緩衝
f = open('demo_3.txt', 'w', buffering=0)
f.write('abc')
執行程式並開啟demo_3.txt檔案發現資料已經寫入到檔案中。
相關文章
- C語言setvbuf()函式:設定檔案流的緩衝區C語言函式
- javascript緩衝彈性方式設定元素的尺寸JavaScript
- 將python stdout設定為不緩衝Python
- 無緩衝檔案IO和目錄操作
- C語言檔案與目錄(四)緩衝區C語言
- 檔案的複製通過字元流和緩衝流(Buffered)字元
- windows系統清理磁碟臨時檔案,及緩衝檔案,及離線檔案和空閒檔案Windows
- Golang併發程式設計有緩衝通道和無緩衝通道(channel)Golang程式設計
- 如何實現檔案共享,檔案共享的設定方法-鐳速
- LNMP 分散式叢集(二):NFS檔案伺服器的搭建與檔案緩衝上傳的配置LNMP分散式NFS伺服器
- 如何給PDF檔案設定密碼?密碼
- .Prettierrc檔案的設定
- 第五篇:使用無緩衝IO函式讀寫檔案函式
- 如何設定eclipse的檔案的預設開啟方式Eclipse
- 緩衝區分析
- 如何設定redo log的OMF 及如何修改log檔案大小
- Host是什麼?如何設定host檔案?
- C 標準庫IO緩衝區和核心緩衝區的區別
- Duilib的雙緩衝實現,附帶GDI、WTL的雙緩衝實現UI
- 互連效能變差,檢查UDP緩衝區設定,監控RAC度量UDP
- 設定 Windows Media Player 推薦設定的登錄檔檔案Windows
- PHP的輸出緩衝區PHP
- jive中的緩衝技術
- Socket程式設計注意接收緩衝區大小程式設計
- Java™ 教程(緩衝流)Java
- JavaScript 緩衝運動JavaScript
- MySQL InnoDB緩衝池MySql
- Java NIO:緩衝區Java
- 快取與緩衝快取
- C 呼叫redis緩衝Redis
- getchar緩衝區
- 雙緩衝學習
- 如何在MacOS中設定共享檔案協議?Mac協議
- 開關電源緩衝吸收電路:拓撲吸收、RC吸收、RCD吸收、鉗位吸收、無損吸收、LD緩衝、LR緩衝、飽和電感緩衝、濾波緩衝、振鈴_rc吸收和rcd吸收
- Linux中如何設定顯示檔案的前幾行?Linux
- win10如何設定不顯示最近使用的檔案Win10
- 如何使用Win8系統設定共享檔案
- 如何在本地修改Hosts檔案設定域名訪問?