impedire CRLF nei dati di esportazione CSV
Domanda
Ho una funzionalità di esportazione che legge i dati dal DB (interi record) e li scrive in un file .txt, un record su una riga ogni campo è separato da ';'. il problema che sto affrontando è che alcuni campi contengono CRLF in esso e quando li scrivo nel file si passa alla riga successiva, distruggendo così la struttura del file.
L'unica soluzione è sostituire i CRLF con un valore personalizzato e, al momento dell'importazione, sostituirli con CRLF. ma non mi piace questa soluzione perché questi file sono enormi e l'operazione di sostituzione riduce le prestazioni ....
Hai altre idee?
grazie!
Soluzione
Sì, usa un generatore CSV che cita i valori di stringa. Ad esempio, il modulo 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')
Uscite:
['Spam', 'Spam', 'Spam', 'Spam', 'Spam', 'Baked Beans']
['Spam', 'Lovely Spam', 'Wonderful Spam\r\nbar']
Altri suggerimenti
Se hai il controllo su come il file viene esportato e importato, allora potresti prendere in considerazione l'utilizzo di XML .. inoltre puoi usare virgolette doppie per indicare letterali come ", " nei valori.