我用來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__使用了哈希,因此不需要保留哈希。
添加回答
舉報
0/150
提交
取消