我正在内存受限的环境中解压缩一个非常大的CSV文件。出于这个原因,我每次解压缩一行代码,如下所示:
with zipfile.ZipFile(temp_file.name) as zip_content:
filename = zip_content.namelist()[0]
with zip_content.open(filename, mode="r") as content:
for line in content:
print(line)
它将每一行都正确地生成一个字节数组。
b'name,age,city\n'
b'John,12,Madrid\n'
...
我想用csv.DictReader
来处理这些行,这样我就可以可靠地访问每个字段。
然而,显然我不能在循环中为每一行创建一个新的dict阅读器。
我很想推出自己的解决方案,解析标题,然后为每行创建这些字典,但我想知道是否有一些快速的方法来利用DictReader
。
有什么方法可以避免先把整个文件阅读到内存中?
2条答案
按热度按时间8yoxcaq71#
在这里,您每次只在内存中保存一行(加上头),因此对于大型CSV文件来说应该是有效的。
rfbsl7qr2#
您可以使用io.TextIOWrapper Package 打开的zip条目,然后使用
csv.DictReader
逐行读取CSV文件。对于示例CSV输入,输出将是: