圍觀大神的檔案讀取操作

2022-08-22 23:00:14 字數 1199 閱讀 3722

在沒看到大神檔案處理操作的時候,我處理檔案操作的**風格都是如下

# 讀取小檔案

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 寫的方式開啟...