Ich verstehe nicht, wenn Sie einen klaren Blick auf das, was Sie zu erhalten versuchen..
Sie sagen "Ich weiß (...) mein Anwendungsfall ist ein Missbrauch".
Aber Missbrauch bedeutet, dass die Möglichkeit der Verwendung besteht.
In Ihrem Fall gibt es jedoch keine mögliche Verwendung, was Sie "beschrieben" haben, ist unmöglich, weil das, was an einen CSV-Parser übergeben wird, ein gültiges CSV-Format haben muss und Ihrs nicht.
In einer CSV-gültigen Zeichenfolge sind die meisten Zeichen Informationen und einige Zeichen sind Metainformationen, die zum Interpretieren der Zeichenfolge zum Extrahieren der Informationen erforderlich sind.
Was Sie beschreiben, ist, dass Sie wollen, dass die Zeichen "
in der Informationskategorie und Meta-Informationskategorie insgesamt sein sollten. Es ist wie jemand, der seine/ihre linke Hand mit der linken Hand fangen möchte ...
Dieses Problem tritt bei Ihrer Zeichenfolge auf, weil es keine Zeichenfolge aus dem Lesen einer CSV-Datei ist. Es ist eine Zeichenfolge wie sie geschrieben wird.
Es ist unmöglich, eine Zeichenfolge wie diese aus dem Lesen einer CSV-Datei zu erhalten, weil sie nicht so in der CSV-Datei geschrieben werden konnte.
Wenn in eine CSV-Datei geschrieben, '"simple|split"|test'
auf True
"""simple|split"""|test
mit doublequote
Satz geschrieben werden konnte, ist der Standard
oder #"simple#|split#"|test
mit doublequote = False, escapechar = '#'
.
Wenn Sie die Informationen extrahieren, wie Sie beschrieben, haben Sie nicht einen Parser zu erstellen, müssen Sie nur ein bereits bestehendes Tool verwenden:
import re
reg = re.compile('".*?"|[^|]+')
print reg.findall('yoo|"simple|split"|test|end"pos|hu')
Ergebnis
['yoo', '"simple|split"', 'test', 'end"pos', 'hu']
Sie über muss einen eigenen Parser schreiben. Die Anführungszeichen sind ein Mittel zum Entkommen von Daten, die ansonsten nicht als eine Spalte betrachtet werden würden und daher nicht als Teil der Ausgabe betrachtet werden. –
Je nachdem, wie kompliziert die Daten sind, können Sie möglicherweise etwas Schreckliches wie 'filter (None, re.split (r '(". *? ") | \ |', S)) betrügen und verwenden - oder schauen in 'pyparsing' –
Hallo, ich habe eine Antwort gepostet, in der ich in der Tat entwickle, was Martjin und Jon gesagt haben. Könnten Sie bitte sagen, warum Sie nicht daran gedacht haben, eine Regex zu verwenden? – eyquem