Pergunta

Eu tenho uma funcionalidade de exportação que lê dados de DB (registros inteiros) e escreve-los em um arquivo .txt, um registro em uma linha cada campo separados por ';'. O problema que estou enfrentando é que alguns campos contêm CRLFs nele e quando eu escrevê-los para o arquivo ele vai para a próxima linha destruindo assim a estrutura do arquivo.

A única solução é substituir os CRLFs com um valor personalizado, e na importação substituir volta com CRLF. mas eu não gosto dessa solução, porque esses arquivos são enormes ea operação de substituição diminui o desempenho ....

Você tem outras idéias?

Obrigado!

Foi útil?

Solução

Sim, usar um gerador CSV que valores de cadeia aspas. Por exemplo, Python do csv módulo.

Por exemplo (rasgado e modificado a partir do csv docs ) :

import csv
def write(filename):
    spamWriter = csv.writer(open(filename, 'w'), quoting=csv.QUOTE_ALL)
    spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam\nbar'])

def read(filename):
    reader = csv.reader(open(filename, "rb"))
    for row in reader:
        print row

write('eggs.csv')
read('eggs.csv')

Saídas:

['Spam', 'Spam', 'Spam', 'Spam', 'Spam', 'Baked Beans']
['Spam', 'Lovely Spam', 'Wonderful Spam\r\nbar']

Outras dicas

Se você tem controle sobre como o arquivo é exportado e importado, então você pode querer considerar o uso de XML .. Também você pode usar aspas duplas eu acredito para indicar literais como "" nos valores.

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