Pergunta

Eu tenho grandes arquivos de dados de valores em uma grade 2D. Eles estão organizados de modo que linhas de dados subsequentes na grade são linhas subsequentes no arquivo. Cada coluna é separada por um caractere de guia. Essencialmente, este é um arquivo CSV, mas com guias em vez de colunas.

Eu preciso da transposição dos dados (a primeira linha se torna a primeira coluna) e emite -os para outro arquivo. Qual é a melhor forma de fazer isso? Qualquer idioma está bem (prefiro usar Perl ou C/C ++). Atualmente, eu tenho o script Perl, acabei de ler em todo o arquivo na memória, mas tenho arquivos que são simplesmente gigantescos.

Foi útil?

Solução

A maneira mais simples seria fazer vários passes através da sua entrada, extraindo um subconjunto de colunas em cada passagem. O número de colunas seria determinado pela quantidade de memória que você queria usar e quantas linhas estão no arquivo de entrada.

Por exemplo:

No passe 1, você lê o arquivo de entrada inteiro e processa apenas a primeira, digamos, 10 colunas. Se a entrada tivesse 1 milhão de linhas, a saída seria um arquivo com 1 milhão de colunas e 10 linhas. No próximo passe, você leria a entrada novamente e processaria as colunas 11 a 20 a 20, anexando os resultados ao arquivo de saída original. E assim por diante....

Outras dicas

Se você tem Python com Numpy instalado, é tão fácil quanto este:

#!/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

... a csv O módulo faz parte da biblioteca padrão do Python.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top