Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对不符合';我记不起来了?_Python_Sorting_Csv_Windows Server 2008 - Fatal编程技术网

Python 如何对不符合';我记不起来了?

Python 如何对不符合';我记不起来了?,python,sorting,csv,windows-server-2008,Python,Sorting,Csv,Windows Server 2008,我有一些大的(20GB+)CSV文件,它们是双引号“文本限定的,我需要排序并输出到新文件 有些文件只是按一列数字排序,而其他文件则按两列排序,第一列按数字排序,第二列按字符串排序 到目前为止,我已经尝试了Pythons csv排序,但最终由于内存不足而失败。还有CoreUtils for Windows,尽管排序似乎无法处理文本限定符,并且给出了错误的结果 是否有任何推荐的/现有的解决方案可以处理这种排序?平台是Windows Server 2008 R2。这里您需要一些外部排序技巧。其想法是创

我有一些大的(20GB+)CSV文件,它们是双引号“文本限定的,我需要排序并输出到新文件

有些文件只是按一列数字排序,而其他文件则按两列排序,第一列按数字排序,第二列按字符串排序

到目前为止,我已经尝试了Pythons csv排序,但最终由于内存不足而失败。还有CoreUtils for Windows,尽管排序似乎无法处理文本限定符,并且给出了错误的结果


是否有任何推荐的/现有的解决方案可以处理这种排序?平台是Windows Server 2008 R2。

这里您需要一些外部排序技巧。其想法是创建较小的排序文件,然后逐个排序并保存在新文件中。下面是一个快速摘要

  • 将20GB文件拆分为100-1000个文件(取决于系统性能)
  • 使用传统的CSV排序方法分别对100个文件(块)进行排序
  • 创建另一个文件,该文件将最终成为排序后的输出。我们将其称为RESULT
  • 逐行读取第一个文件和结果。迭代地将这些行添加到另一个文件(例如,TEMP)。第一次迭代后,结果不会为空。假设当前块文件包含[1,3,5],结果包含[2,4,6],比较它们的最低未读元素。此处,(1,2)。将“1”写入TEMP。在下一次迭代中,您必须比较(3,2)然后将“2”写入TEMP。继续。基本思想是常规合并排序的核心。将TEMP重命名为结果并清除TEMP
  • 对每个区块和结果重复此操作
  • 所以,当您不断迭代块时,结果会慢慢增长,并一直保持排序。此文件是迭代结束后最终排序的CSV

    您可以尝试几种不同的算法以满足您的需要。查看更多详细信息


    因此,我能够在一台8GB的机器上,在2-3小时内对40GB的文件进行排序,该机器还运行着其他几个进程。

    这里您需要一些外部排序技巧。其想法是创建较小的排序文件,然后逐个排序并保存在新文件中。下面是一个快速摘要

  • 将20GB文件拆分为100-1000个文件(取决于系统性能)
  • 使用传统的CSV排序方法分别对100个文件(块)进行排序
  • 创建另一个文件,该文件将最终成为排序后的输出。我们将其称为RESULT
  • 逐行读取第一个文件和结果。迭代地将这些行添加到另一个文件(例如,TEMP)。第一次迭代后,结果不会为空。假设当前块文件包含[1,3,5],结果包含[2,4,6],比较它们的最低未读元素。此处,(1,2)。将“1”写入TEMP。在下一次迭代中,您必须比较(3,2)然后将“2”写入TEMP。继续。基本思想是常规合并排序的核心。将TEMP重命名为结果并清除TEMP
  • 对每个区块和结果重复此操作
  • 所以,当您不断迭代块时,结果会慢慢增长,并一直保持排序。此文件是迭代结束后最终排序的CSV

    您可以尝试几种不同的算法以满足您的需要。查看更多详细信息


    因此,我能够在一台8GB的机器上,在2-3小时内对一个40GB的文件进行排序,这台机器还运行着其他几个进程。

    您可以将其加载到数据库中,排序,然后导出您可以将其加载到数据库中,排序,然后导出