我用来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
提交
取消