如何在python中操作巨大的CSV文件

如何在python中操作巨大的CSV文件,python,csv,encoding,bigdata,Python,Csv,Encoding,Bigdata,我有一个超过16G的CSV文件,每行都是文本数据。当我对整个CSV文件数据进行编码(例如,一次热编码)时,由于内存限制,我的进程被终止。有没有办法处理这种“大数据” 我在想,将整个CSV文件拆分为多个“较小”的文件,然后将它们附加到另一个CSV文件中,这是处理大型CSV文件的正确方法吗?您的问题没有说明处理此CSV文件所使用的语言。我将使用C#来回答,但我认为该策略也同样适用于Java 您可以尝试使用StreamReader类逐行读取文件。这应该考虑到事情的可读性 比如: using (var

我有一个超过16G的CSV文件,每行都是文本数据。当我对整个CSV文件数据进行编码(例如,一次热编码)时,由于内存限制,我的进程被终止。有没有办法处理这种“大数据”


我在想,将整个CSV文件拆分为多个“较小”的文件,然后将它们附加到另一个CSV文件中,这是处理大型CSV文件的正确方法吗?

您的问题没有说明处理此CSV文件所使用的语言。我将使用C#来回答,但我认为该策略也同样适用于Java

您可以尝试使用
StreamReader
类逐行读取文件。这应该考虑到事情的可读性

比如:

using (var reader = new StreamReader(...))
{
    var line = string.Empty;

    while ((line != reader.ReadLine()) != null)
    {
        Process(line);
    }
}
注意:这是C#中的一段代码片段,与实际代码相比更像是伪代码

您应该使用某种本地数据库技术(SQLite或SQLServerLocalDB,甚至MySQL)创建一个数据库,并将数据加载到该数据库中的一个或多个表中


然后,您可以根据数据库中保存的数据而不是简单的文本文件编写任何其他进一步的处理。

您的问题没有说明处理此CSV文件所使用的语言。我将使用C#来回答,但我认为该策略也同样适用于Java

您可以尝试使用
StreamReader
类逐行读取文件。这应该考虑到事情的可读性

比如:

using (var reader = new StreamReader(...))
{
    var line = string.Empty;

    while ((line != reader.ReadLine()) != null)
    {
        Process(line);
    }
}
注意:这是C#中的一段代码片段,与实际代码相比更像是伪代码

您应该使用某种本地数据库技术(SQLite或SQLServerLocalDB,甚至MySQL)创建一个数据库,并将数据加载到该数据库中的一个或多个表中


然后,您可以基于数据库中保存的数据而不是简单的文本文件来编写任何其他进一步的处理。

这已在中讨论过

对于16GB csv文件,最合理的做法可能不是将其全部加载到内存中,而是逐行读取和处理:

with open(filename, "r") as f:
    lines = csv.reader(f)
    for line in lines:
        #Process the line

这一点已在本报告中讨论过

对于16GB csv文件,最合理的做法可能不是将其全部加载到内存中,而是逐行读取和处理:

with open(filename, "r") as f:
    lines = csv.reader(f)
    for line in lines:
        #Process the line

不完整。这可能取决于您如何读取文件。@Henkholtman使用python,尤其是在Pandas Library中。这可能取决于您读取文件的方式。@HenkHolterman使用python,特别是在Pandas Library中。谢谢,我编辑标题是为了指定我使用的语言。谢谢,我编辑标题是为了指定我使用的语言。因此我可以逐行读取和处理,而不是将所有内容加载到内存中,对吗?所以写入文件将是逐行的,对吗?是的,如果你想得到文件的修改副本,你应该这样做。打开另一个文件并将处理过的行写入该文件。这样我就可以逐行读取和处理,而不是将所有内容都加载到内存中,对吗?所以写入文件将是逐行的,对吗?是的,如果你想得到文件的修改副本,你应该这样做。打开另一个文件并将已处理的行写入该文件。