2016-04-20 8 views
1

Meine Daten sieht wie folgt aus etwas:Python CSV Schriftsteller Zitat Strings mit zusätzlichen Leerzeichen

data = [ 
    [" trailing space", 19, 100], 
    [" ", 19, 100], 
] 

writer = csv.writer(csv_filename, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 

Ausgabe

trailing space,19,100 
,19,100 

Was ich will

" trailing space",19,100 
" ",19,100 

Python Standard-CSV-Schriftsteller der hat Option zu "QUOTE_MINIMAL", aber es enthält keine Zeichenketten mit zusätzlichen Leerzeichen darin. In meinem Fall sind diese leeren Bereiche tatsächlich kritisch, aber ohne zu zitieren, streift der Leser (wie libre-office) die Leerzeichen, wenn sie nicht zitiert werden.

Gibt es eingebaute Optionen oder schnelle billige Möglichkeit, dem Verfasser zu sagen, leere Strings mit Leerzeichen zu zitieren?

Auch "QUOTE_NONNUMERIC" zitiert zu viel. Die tatsächlichen Daten sind riesig (einige hundert Megabyte mit 60% - 70% der Strings). Es klingt vielleicht albern, aber ich versuche, die CSV-Größe zu reduzieren, indem Sie die Anführungszeichen minimieren.

Antwort

2

Warum nicht nur QUOTE_NONNUMERIC verwenden? Das wird alle Strings zitieren, nicht nur solche mit Leerzeichen, aber es werden diese auch zitiert.

with open("quote.csv", "w", newline="") as fp: 
    writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC) 
    writer.writerows(data) 

gibt mir

(3.5.1) [email protected]:~/coding$ cat quote.csv 
" leading space",19,100 
" ",19,100 
+0

Es wird zu viel zitiert werden. Nicht sicher, wie groß der Unterschied der Größe sein wird, aber meine CSV-Ausgabe kann ziemlich groß sein (die Frage mit mehr Details aktualisiert). Und Zitate können manchmal unnötig sein. – Sufendy

+0

Die Änderung der Dateigröße aufgrund des Entfernens von Anführungszeichen ist trivial im Vergleich zu allem, was Sie sonst noch tun könnten (z. B. Komprimieren der Datei und Lesen durch einen Dekomprimierungsstrom). Es hört sich so an, als hätten Sie ein großes Problem mit dem XY-Problem. – DSM

+0

Guter Punkt. Ich weiß nicht, ich denke du hast Recht. Aber es scheint, als hätte das "QUOTE_MINIMAL" flexibler sein können. Auch mit benutzerdefinierten Zitat Weg von der anderen Antwort ist zu hacky. – Sufendy

0

Versuchen Sie, die unter Angabe komplett zu entfernen. Behält alle Anführungszeichen wie benötigt.

writer = csv.writer(csv_filename, delimiter=',', quoting=csv.QUOTE_NONE) 
Verwandte Themen