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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top