CSV Splitter para o Ubuntu?

4

Existe um aplicativo ou um comando que poderia dividir um csv (preservando o cabeçalho de uma tabela) em partes iguais menores?

Estou tentando importar um arquivo grande de 36 MB e o importador está indo para o kaputz.

Aqui está um exemplo de um aplicativo do Windows: link

Eu acho que eu poderia usar o vinho para usar este programa, mas preferiria algo nativo do Ubuntu.

    
por chrisjlee 25.08.2011 / 16:41

4 respostas

8

Você pode usar o csvfix.

É uma ferramenta de linha de comando para gerenciar arquivos CSV. A página de download não tem nenhum binários do Linux, mas você pode compilar o código-fonte de um makefile.

Aqui é uma lista de comandos. Em particular, o comando file_split parece ser o que você procura.

O manual do csvfix pode ser encontrado aqui

    
por Kris Harper 25.08.2011 / 16:59
5

Então você quer ter vários arquivos que contenham parte das entradas no arquivo principal e cada um contém o cabeçalho da tabela?

Se é isso que você quer, pode-se escrever um script simples que leva o primeiro arquivo e o número de arquivos que você quer (ou o número de linhas em cada arquivo) e cria esses arquivos.

Se não precisar ser gráfico e você me disser quais parâmetros deseja definir, posso tentar criar um script para você.

Esta é a minha solução rápida e suja:

#!/usr/bin/python

import optparse
import sys
import os

parser = optparse.OptionParser(usage="csv-splitter infile", description="Takes a CSV file and splits it into smaller files. The header of the infile is written to each file.")
parser.add_option("-p", "--parts", dest="parts", type="int", default=3, help="number of resulting files")

(options, args) = parser.parse_args()
del parser

infile = args[0]

lines = 0

if not os.path.exists(infile):
    print "file does not exist"
    sys.exit(1)

print "counting lines ..."
with open(infile) as h:
    for line in h:
        lines += 1

lines_per_file = lines/options.parts
print "found %d lines, that makes %d lines per file" % (lines, lines_per_file)

with open(infile) as h:
    header = h.readline()
    read = h.readline()
    for filenumber in xrange(options.parts):
        written_lines = 0
        print "writing to file %d of %d ..." % (filenumber+1, options.parts)
        with open(infile+"-part-"+str(filenumber)+".csv", "w") as outfile:
            outfile.write(header)
            while read != '' and (written_lines <= lines_per_file or filenumber+1 == options.parts):
                outfile.write(read)
                written_lines += 1
                read = h.readline()

print "done"
    
por Martin Ueding 25.08.2011 / 16:50
2

Também fiz uma versão on-line que permite dividir por linhas, tamanho de arquivo ou contagem de arquivos. É bastante intuitivo e fácil de usar.

CSV Live Splitter

    
por philip bjorge 27.11.2012 / 22:24
0

Eu fiz um porque queria um on-line que eu pudesse usar no meu mac ..

verifique este

    
por david dawson 05.10.2012 / 10:41