讀取超過記憶體大小的檔案的解決辦法

2022-09-06 07:54:10 字數 794 閱讀 8473

現在考慮有乙個jsonline 格式的檔案file.txt 大小約為10k,之前處理檔案的**如下所示

def get_lines():

l =

with open('file.txt', 'rb') as f:

for eachline in f:

return l

if __name__ == '__main__':

for e in get_lines():

process(e) # 處理每一行資料

現在要處理乙個大小為10g 的檔案,但是記憶體只有4g,如果在只修改get_lines 函式而其他**保持不變的情況下,應該如何實現?需要考慮的問題都有哪些?

需要考慮的問題:

- 檔案大小超過記憶體大小,需要分批讀取

- 需要記錄每次讀取結束位置,以便下次讀取

## 解決辦法使用yield將get_lines變成乙個生成器函式,由於生成器只有在需要的時候才取值,所以不會造成記憶體占用過高,生成器的另乙個特性是能夠儲存狀態,因而可以很好地解決上述兩個問題

def get_lines():

l =

with open('file.txt', 'rb') as f:

data = f.readlines(10000)

yield l

補充:如果不限制只修改get_lines函式,對於大檔案,在linux下我們還可以通過split方法將大檔案切割成很多小檔案,然後分別讀取這些小檔案。

enum的記憶體大小

enum在記憶體中占用多少儲存空間,為什麼在使用enum型別的時候不用寫上enum的名字呢,想struct一樣呼叫?在網上搜尋了一下,找到了想要的結論!enum定義類似與下面這樣 enum color 用起來可能像這樣 color color red switch color 先說為什麼red,不能...

free記憶體大小的問題

我們知道malloc的呼叫形式如 type p type malloc n sizeof type free的呼叫形式如 free p 好了,問題來了,free函式,我們只給傳入乙個指標,沒有傳入記憶體塊的大小n,那麼編譯器怎麼知道要釋放多少位元組的記憶體,如果讓你來實 現怎麼實現?當時,蒙了,鬱悶...

類的占用記憶體大小

1.類的大小為類的非靜態成員資料的型別大小之和,也 就是說靜態成員資料不作考慮。2.普通成員函式與sizeof無關。3.靜態成員並不屬於某個物件,sizeof取的是物件大小。4.虛函式由於要維護在虛函式表,所以要佔據乙個指標大小,也就是4位元組。5.空類的sizeof為1。因為乙個空類也要例項化,所...