我在 2D 网格上有大型数据文件。它们的组织方式使得网格中的后续数据行是文件中的后续行。每列由制表符分隔。本质上,这是一个 CSV 文件,但带有选项卡而不是列。
我需要转置数据(第一行成为第一列)并将其输出到另一个文件。最好的方法是什么?任何语言都可以(我更喜欢使用 Perl 或 C/C++)。目前,我的 Perl 脚本只是将整个文件读入内存,但我的文件非常庞大。
我在 2D 网格上有大型数据文件。它们的组织方式使得网格中的后续数据行是文件中的后续行。每列由制表符分隔。本质上,这是一个 CSV 文件,但带有选项卡而不是列。
我需要转置数据(第一行成为第一列)并将其输出到另一个文件。最好的方法是什么?任何语言都可以(我更喜欢使用 Perl 或 C/C++)。目前,我的 Perl 脚本只是将整个文件读入内存,但我的文件非常庞大。
最简单的方法是多次通过您的输入,在每次通过时提取列的子集。列数取决于您要使用多少内存以及输入文件中有多少行。
例如:
在第 1 步中,您读取整个输入文件并仅处理前 10 列。如果输入有 100 万行,则输出将是一个有 100 万列和 10 行的文件。在下一次通过时,您将再次读取输入,并处理第 11 到 20 列,将结果附加到原始输出文件中。等等....
如果你安装了带有 NumPy 的 Python,就这么简单:
#!/usr/bin/env python
import numpy, csv
with open('/path/to/data.csv', 'rb') as file:
csvdata = csv.reader()
data = numpy.array(csvdata)
transpose = data.T
...该csv
模块是 Python 标准库的一部分。