亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用DictReader節省內存開銷

使用DictReader節省內存開銷

繁花不似錦 2021-03-06 11:08:08
我用來csv.DictReader從CSV文件讀取數據。遍歷閱讀器后,它會產生字典,其中包含從CSV標頭中提取的鍵以及每行的值:with open(filename) as h:    data = csv.DictReader(h)    for row in data:        # row is dict每行是帶有鍵的字典,每行具有完全相同的鍵。如果值是整數并且鍵(字符串)很長,則鍵比值占用更多的存儲空間。是否可以按照每行的鍵指向鍵的相同實例的方式來對行進行迭代,以便節省每行的內存空間?請注意,我不預先知道按鍵-它們是從CSV標頭中提取的。否則我可以使用namedtuple或__slots__
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

您可以使用namedtuple; 自己從第一行構建它:


with open(filename, 'rb') as h:

    data = csv.reader(h)

    headers = next(data)

    RowTuple = namedtuple('RowTuple', headers)

    for row in data:

        row = RowTuple(row)

本質上就是DictReader()這樣。從第一行拿鑰匙。


請注意,DictReader()代碼使用來創建字典dict(zip(self.fieldnames, row));這將為每行重復使用相同的字符串,并且唯一的內存開銷是dict表本身加上鍵的哈希值(這些值每次都會重新計算并緩存)。不會為每一行重新創建鍵的字符串。該namedtuple方法也不是,但是由于__slots__使用了哈希,因此不需要保留哈希。


查看完整回答
反對 回復 2021-03-27
  • 1 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號