我在2D网格上有大量的数据文件。 它们被组织成使得网格中的后续数据行是文件中的后续行。 每个列由制表符分隔。 从本质上讲,这是一个CSV文件,但使用标签而不是列。
我需要转置数据(第一行成为第一列)并将其输出到另一个文件。最好的方法是什么?任何语言都可以(我更喜欢使用Perl或C / C ++)。目前,我有Perl脚本只是将整个文件读入内存,但我的文件只是巨大的。
答案 0 :(得分:2)
最简单的方法是在输入中进行多次传递,在每次传递时提取列的子集。列数取决于您想要使用多少内存以及输入文件中有多少行。
例如:
在第1遍中,您读取整个输入文件并仅处理第一列,例如10列。如果输入有100万行,则输出将是一个包含100万列和10行的文件。在下一个传递中,您将再次读取输入,并处理第11至20列,将结果附加到原始输出文件。等等......
答案 1 :(得分:0)
如果您安装了安装了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标准库的一部分。