verhindern CRLF im CSV-Export von Daten
Frage
Ich habe eine Exportfunktion, die Daten von DB (gesamte Datensätze) liest und schreibt sie in eine .txt-Datei, einen Datensatz für eine Zeile jedes Feld getrennt sind durch ‚;‘. das Problem, das ich bin vor, dass einige Felder CRLFs darin enthalten und wenn ich sie in die Datei schreiben geht es in der nächsten Zeile so die Struktur der Datei zu zerstören.
Die einzige Lösung ist, die CRLFs mit einem benutzerdefinierten Wert zu ersetzen und bei der Einfuhr mit CRLF ersetzen zurück. aber Ich mag nicht über diese Lösung, da diese Dateien sind sehr groß und die Ersetzen-Operation verringert Leistung ....
Haben Sie noch andere Ideen?
Danke!
Lösung
Ja, verwenden Sie einen CSV-Generator, die String-Werte zitiert. Zum Beispiel Python csv
Modul.
Zum Beispiel (gerippt und modifizierte aus der 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')
Ausgänge:
['Spam', 'Spam', 'Spam', 'Spam', 'Spam', 'Baked Beans']
['Spam', 'Lovely Spam', 'Wonderful Spam\r\nbar']
Andere Tipps
Wenn Sie die Kontrolle darüber, wie die Datei exportiert und importiert werden, dann könnten Sie wollen XML prüfen, mit .. auch können Sie doppelte Anführungszeichen verwenden, ich glaube, um anzuzeigen, wie Literale „“ in den Werten.