在沒看到大神檔案處理操作的時候,我處理檔案操作的**風格都是如下
# 讀取小檔案
with open('file_path','rb') as f:
content = f.read()
# todo 邏輯處理...
# 讀取大檔案
with open('file_path','rb') as f:
for line in f:
# todo 邏輯處理...
# 處理極端情況,大檔案且資料都在一行中
with open('file_path','rb') as f:
block_size = 1024*8
while 1:
chunk = f.read(block_size)
if not chunk:
break
# todo 邏輯處理...
利用生成器,解耦讀取和生成
def file_reader(fp,block_size=1024*8):
while 1:
chunk = fp.read(block_size)
if not chunk:
break
yield chunk
def handle_data(fpath):
with open(fpath,'rb') as f:
for chunk in file_reader(f)
# todo 邏輯處理...
似乎看了上面的**,感覺沒啥改進的了,其實不然,iter()是乙個用來構造迭代器的內建函式,但它還有乙個方法,iter(callable,sentinel),會返回乙個特殊的物件,迭代它將不斷產生callable的呼叫結果,直到結果為sentinel為止
def file_reader(fp,block_size=1024*8):
# 利用partial只是方便構造乙個不用傳入引數的函式而已
# 迴圈不斷返回fp.read的結果,直到結果為''則停止迭代
for chunk in iter(partial(fp.read,block_size),'')
yield chunk
上面的讀取操作只用了2行解決,那麼效能到底如何呢,從一開始的迴圈讀取到生成器,效率提公升了近4倍,記憶體占用更是不到原來的百分之一 讀取檔案操作
獲取路徑 nsstring path nsbundle mainbundle pathforresource file3 oftype dmh nslog path path 轉換 unsigned int lenofstrvalue path length char szvalue lenofst...
讀取檔案的操作1
今天的工作把乙個excel 用c 儲存進記憶體,並取出最大值.excel 有20個sheet,每個sheet表示一行,每個sheet內又有很多列,乙個sheet內最多有20行。我需要將每行的每列的最大值求出來取出。程式如下 include include include include includ...
Python的檔案讀取操作
open函式負責開啟檔案,裡面的第乙個引數必須要有 檔案的路徑和名稱。第二個引數是操作方法 r 以唯讀方式開啟 w 寫方式開啟,會覆蓋以前的內容 x 建立方式開啟,如果檔案已經存在,報錯 b binary方式,以二進位制方式寫入 t 文字方式開啟 f open r text.txt w 寫的方式開啟...