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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top