現在考慮有乙個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。因為乙個空類也要例項化,所...