Existe algum utilitário para transpor um arquivo .csv?

3

Eu tenho alguns arquivos csv com muitas colunas para o LibreOffice Calc abrir, mas apenas algumas linhas. Se eu puder transpor o arquivo csv, ele deve estar ok, pois o Calc pode lidar com muito mais linhas do que colunas.

    
por drevicko 02.11.2011 / 08:06

3 respostas

5

Um programa python simples faria o trabalho (e como isso não é realmente testado: faça backup do arquivo csv com antecedência!):

import csv
import sys
infile = sys.argv[1]
outfile = sys.argv[2]

with open(infile) as f:
    reader = csv.reader(f)
    cols = []
    for row in reader:
        cols.append(row)

with open(outfile, 'wb') as f:
    writer = csv.writer(f)
    for i in range(len(max(cols, key=len))):
        writer.writerow([(c[i] if i<len(c) else '') for c in cols])

Você pode salvar isso em um arquivo "my_csv_transposer.py" e chamá-lo da linha de comando da seguinte forma:

python my_csv_transposer.py <theinfilename> <theoutfilename>
    
por xubuntix 02.11.2011 / 08:32
2

Você pode usar este script do shell da seguinte forma:

$ ./transpose_csv < theinfilename > theoutfilename

E aqui está o script:

#!/usr/bin/env python
import sys, csv, itertools
rows = itertools.izip(*csv.reader(sys.stdin, delimiter=','))
sys.stdout.writelines(','.join(row) + '\n' for row in rows)
    
por xApple 28.01.2014 / 18:46
1

Para referência, aqui está o mesmo encantamento em Ruby:

require 'CSV'

rows = CSV.new($stdin).read
puts rows.transpose.map { |x| x.join ',' }
    
por Manav 08.01.2015 / 08:31