Prevenir CRLF em dados de exportação CSV
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!
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.