在Python中按日期对大型CV进行排序,而不将其全部加载到内存中

在Python中按日期对大型CV进行排序,而不将其全部加载到内存中,python,python-3.x,csv,sorting,Python,Python 3.x,Csv,Sorting,我有一个巨大的csv文件(比如8GB或更多,有数百万行),第一个字段是文本字段(没有引用),第二个是格式为mm/dd/yyyy的日期。其他字段可能会有所不同。没有标题,utf8编码。请参见此处的示例: Lorem ipsum dolor sit amet,10/30/2020,2340.234450,pet,999 consectetur adipiscing elit,10/30/2020,54.2,home,577 我需要高效地(尽可能快地)使用Python按日期对文件进行排序,而无需将所

我有一个巨大的csv文件(比如8GB或更多,有数百万行),第一个字段是文本字段(没有引用),第二个是格式为mm/dd/yyyy的日期。其他字段可能会有所不同。没有标题,utf8编码。请参见此处的示例:

Lorem ipsum dolor sit amet,10/30/2020,2340.234450,pet,999
consectetur adipiscing elit,10/30/2020,54.2,home,577
我需要高效地(尽可能快地)使用Python按日期对文件进行排序,而无需将所有文件一起加载到内存中。问题是我几乎没有内存(4GB左右的RAM)。约会时间越长越好

我发现了一些直接使用OS命令的解决方案(例如and),但没有一个是针对Python和日期字段的。而且,我不能使用数据库。你能帮我吗?

你可以尝试一些“黑客”解决方案,比如将文件上传到内存更多的机器上(例如colab,尽管上传需要一些时间)

您还可以增加交换内存,以便能够在RAM中人工加载

或者,您可以通过只提取日期列和每行的ID(分块打开)来清理它,然后创建一个只包含ID和日期的新数据框,对其进行正常排序,这样索引就可以按顺序排列

但是,您不能将数据帧分块排序,因为根据排序算法,它可能不准确。如果您有: 3 9 1 2 5 6 4 0 8 7 并将其分为两块,您将获得以下内容: 1 2 3 5 9 || 0 4 6 8 7
如何在不重新排序的情况下组合它们?

如果不将内容加载到内存中,则无法对其进行排序。您引用的页面仍在将其加载到内存中,但会加载到其他人的内存中。DOS/Unix SORT命令的内存如果你想对它进行排序,整个内容必须在内存中可用,否则排序可能不准确。我想我可以,把它分成块,或者类似的。类似于这个问题:。现在我编辑了这个问题,更具体一点。如果这太多的话,可能是我递归地将文件的一部分加载到内存中,而不是全部加载到内存中吗?我可能会更好地使用像pandas这样的东西来读取文件,按日期排序,然后再次保存它,这样它至少是有序的。你要求很多,期望做的很少。如果内存仍然是一个问题,你可以将数据分割,但我认为你不会得到你想要的答案。