如何在 python 中操作一个巨大的 CSV 文件
Posted
技术标签:
【中文标题】如何在 python 中操作一个巨大的 CSV 文件【英文标题】:How to manipulate a huge CSV file in python 【发布时间】:2016-10-12 15:20:36 【问题描述】:我有一个超过16G的CSV文件,每一行都是文本数据。当我对整个 CSV 文件数据进行编码(例如 one-hot-encode)时,由于内存限制,我的进程被终止了。有没有办法处理这种“大数据”?
我认为将整个 CSV 文件拆分为多个“较小”文件,然后将它们附加到另一个 CSV 文件,这是处理巨大 CSV 文件的正确方法吗?
【问题讨论】:
不完整。这可能取决于您阅读文件的方式。 @HenkHolterman 使用 python,尤其是在 Pandas 库中 【参考方案1】:您的问题没有说明您使用什么语言来处理此 CSV 文件。我将使用 C# 进行回复,但我认为该策略同样适用于 Java。
您可以尝试使用StreamReader
类逐行读取文件。这应该照顾到事情的阅读方面。
类似:
using (var reader = new StreamReader(...))
var line = string.Empty;
while ((line != reader.ReadLine()) != null)
Process(line);
注意:这是 C# 中的代码 sn-p,比实际代码更伪代码。
您应该使用某种本地数据库技术(SQLite 或 SQL Server LocalDB 甚至 mysql)创建数据库,并将数据加载到其中的一个或多个表中。
然后,您可以根据数据库中保存的数据而不是简单的文本文件来编写任何其他进一步的处理。
【讨论】:
谢谢,我编辑了标题以指定我使用的语言。【参考方案2】:这已经在Reading huge csv files efficiently?讨论过
对于 16GB 的 csv 文件,最合理的做法可能不是将其全部加载到内存中,而是逐行读取和处理:
with open(filename, "r") as f:
lines = csv.reader(f)
for line in lines:
#Process the line
【讨论】:
所以我可以逐行读取和处理,而不是全部加载到内存中,对吧?所以写入文件将是逐行的,对吗? 是的,如果您想获得文件的修改副本,您应该这样做。打开另一个文件并将已处理的行写入该文件。以上是关于如何在 python 中操作一个巨大的 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
Python/SQLAlchemy:如何将巨大的红移表保存到 CSV?
当使用 Python 处理一个巨大的 CSV 时突然停止,“杀死”是啥意思?
如何根据日期列在不同的文本/csv文件中转储一个巨大的mysql表?