Python 按列标题对.csv文件进行排序

Python 按列标题对.csv文件进行排序,python,csv,Python,Csv,有没有一种方法可以按列标题名称对csv文件进行排序(垂直排序),而无需将整个内容加载到内存中?我将其标记为python,因为它是我最熟悉的语言,但任何其他方法也可以。由于数据保护规则的限制,我只能在远程计算机上通过命令行执行此操作。任何磁盘排序算法都将需要更多的磁盘操作,而不仅仅是一次读写操作,而且I/O可能是您的瓶颈。这也会变得更复杂。因此,除非您真的无法将文件放入内存,否则这样做会更快,而且更简单 但是如果你必须这么做 标准的磁盘排序算法是一种合并排序,类似于常见的内存合并排序。它的工作原理

有没有一种方法可以按列标题名称对csv文件进行排序(垂直排序),而无需将整个内容加载到内存中?我将其标记为python,因为它是我最熟悉的语言,但任何其他方法也可以。由于数据保护规则的限制,我只能在远程计算机上通过命令行执行此操作。

任何磁盘排序算法都将需要更多的磁盘操作,而不仅仅是一次读写操作,而且I/O可能是您的瓶颈。这也会变得更复杂。因此,除非您真的无法将文件放入内存,否则这样做会更快,而且更简单

但是如果你必须这么做

标准的磁盘排序算法是一种合并排序,类似于常见的内存合并排序。它的工作原理如下:

sort -t, -k ${colnum},${colnum} -i infile.csv -o outfile.csv
将文件分割成足够大的块,以便放入内存。您可以迭代/惰性地、轻松地执行此操作:比如说,一次读取100MB。只需确保重新找到最后一个换行符,并在换行后保留所有内容,以便下一个换行符

对于每个块,在内存中对其排序,并将结果写入临时文件。您可以使用
csv
模块和带有
key=itemgetter(colnum)
sort
功能

如果有10个或更少的块,只需打开所有临时文件并合并它们。同样,您可以使用
csv
模块和
min
使用相同的键或
heapq.merge
使用等效的装饰排序取消装饰

如果有10-100个块,将10个组合并到较大的临时文件中,然后以完全相同的方式合并较大的临时文件。对于100-1000,或1000-10000,等等,只需继续递归地做同样的事情


如果您有一个不带引号/转义的简单CSV文件,并且您有ASCII数据、要进行ASCII算术排序的ASCII超集数据,或者要根据
LC\u COLLATE
进行排序的ASCII超集数据,那么POSIX命令将完全满足您的要求,就像您自己构建它一样。大概是这样的:

sort -t, -k ${colnum},${colnum} -i infile.csv -o outfile.csv

如果您的数据不满足这些要求,您可能可以执行“装饰-排序-取消装饰”三步解决方案。但在这一点上,切换到Python可能更容易。试图找出如何将任意Excel CSV文件
sed
转换成
排序
可以处理且可以反转的内容听起来好像调试边缘案例比编写Python要浪费更多的时间。

任何磁盘排序算法都需要更多的磁盘操作,而不仅仅是读写一次,而I/O很可能是您的瓶颈。这也会变得更复杂。因此,除非您真的无法将文件放入内存,否则这样做会更快,而且更简单

但是如果你必须这么做

标准的磁盘排序算法是一种合并排序,类似于常见的内存合并排序。它的工作原理如下:

sort -t, -k ${colnum},${colnum} -i infile.csv -o outfile.csv
将文件分割成足够大的块,以便放入内存。您可以迭代/惰性地、轻松地执行此操作:比如说,一次读取100MB。只需确保重新找到最后一个换行符,并在换行后保留所有内容,以便下一个换行符

对于每个块,在内存中对其排序,并将结果写入临时文件。您可以使用
csv
模块和带有
key=itemgetter(colnum)
sort
功能

如果有10个或更少的块,只需打开所有临时文件并合并它们。同样,您可以使用
csv
模块和
min
使用相同的键或
heapq.merge
使用等效的装饰排序取消装饰

如果有10-100个块,将10个组合并到较大的临时文件中,然后以完全相同的方式合并较大的临时文件。对于100-1000,或1000-10000,等等,只需继续递归地做同样的事情


如果您有一个不带引号/转义的简单CSV文件,并且您有ASCII数据、要进行ASCII算术排序的ASCII超集数据,或者要根据
LC\u COLLATE
进行排序的ASCII超集数据,那么POSIX命令将完全满足您的要求,就像您自己构建它一样。大概是这样的:

sort -t, -k ${colnum},${colnum} -i infile.csv -o outfile.csv

如果您的数据不满足这些要求,您可能可以执行“装饰-排序-取消装饰”三步解决方案。但在这一点上,切换到Python可能更容易。试图找出如何将任意Excel CSV文件
sed
转换成
排序
可以处理且可以反转的内容听起来好像调试边缘案例比编写Python要浪费更多的时间。

任何磁盘排序算法都需要更多的磁盘操作,而不仅仅是读写一次,而I/O很可能是您的瓶颈。这也会变得更复杂。因此,除非您真的无法将文件放入内存,否则这样做会更快,而且更简单

但是如果你必须这么做

标准的磁盘排序算法是一种合并排序,类似于常见的内存合并排序。它的工作原理如下:

sort -t, -k ${colnum},${colnum} -i infile.csv -o outfile.csv
将文件分割成足够大的块,以便放入内存。您可以迭代/惰性地、轻松地执行此操作:比如说,一次读取100MB。只需确保重新找到最后一个换行符,并在换行后保留所有内容,以便下一个换行符

对于每个块,在内存中对其排序,并将结果写入临时文件。您可以使用
csv
模块和带有
key=itemgetter(colnum)
sort
功能

如果有10个或更少的块,只需打开所有临时文件并合并它们。同样,您可以使用
csv
模块和
min
使用相同的键或
heapq.merge
使用等效的装饰排序取消装饰

如果有10-100个块,将10个组合并到更大的临时文件中,然后合并