CSV in Python fügt unter Windows einen zusätzlichen Wagenrücklauf hinzu
In Python 2.7 läuft unter Windows XP pro:
import csv
outfile = file('test.csv', 'w')
writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
writer.writerow(['hi','dude'])
writer.writerow(['hi2','dude2'])
outfile.close()
Erzeugt es eine Datei, test.csv, mit einer extra - \ - r in jeder Zeile, etwa so:
test.csv -
hi,dude\r\r\nhi2,dude2\r\r\n
statt des erwarteten:
hi,dude\r\nhi2,dude2\r\n
Warum ist das passiert, oder ist das eigentlich das gewünschte Verhalten?
InformationsquelleAutor der Frage apalopohapa | 2010-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf Windows, öffnen Sie immer Ihre Dateien im Binär-Modus ("rb" bzw. "wb"), bevor Sie Sie in csv.reader-oder csv-Format.Schriftsteller.
CSV ist wirklich ein binäre - format mit "\r\n" Trennung von Datensätzen. Wenn das Trennzeichen ist geschrieben im text-Modus, der Python-runtime ersetzt "\n" mit "\r\n", daher das "\r\n\r", dass Sie beobachtet in Ihrer Datei.
Sehen diese Vorherige Antwort.
Dieser Antwort wurde veröffentlicht in 2010 und befasst sich nicht mit dem problem in Python ist3.
Einer der möglichen Korrekturen in Python ist3, wie beschrieben in @YiboYang Antwort, ist das öffnen der Datei mit der
newline
- parameter auf einen leeren string:InformationsquelleAutor der Antwort John Machin
Während @john-machin gibt eine gute Antwort, es ist nicht immer der beste Ansatz. Zum Beispiel, es funktioniert nicht auf Python 3, es sei denn, Sie Kodieren alle Ihre Eingaben, um die CSV-writer. Auch ist es nicht das Problem wenn das script verwenden will, sys.stdout als stream.
Schlage ich vor, stattdessen die Einstellung des lineterminator " - Attribut bei der Erstellung der Schriftsteller:
Diesem Beispiel wird auf Python 2 und Python 3 und nicht produzieren die unerwünschten Zeilenumbruch-Zeichen. Beachten Sie jedoch, dass es möglicherweise unerwünschte Zeilenumbrüche (wobei das Zeichen LF auf Unix-Betriebssystemen).
In den meisten Fällen jedoch glaube ich, dass Verhalten ist besser und natürlicher, als die Behandlung aller CSV als ein binäres format. Ich Stelle diese Antwort als eine alternative für Ihre Aufmerksamkeit.
InformationsquelleAutor der Antwort Jason R. Coombs
In Python 3 (ich habe nicht versucht, diese in Python-2), können Sie auch einfach
als pro Dokumentation.
Mehr dazu in den doc ' s Fußnote:
InformationsquelleAutor der Antwort Yibo Yang
Ich bin mir nicht ganz sicher, warum es geschieht, aber ändern Sie Ihre Datei-Modus aus "w" , "wb" behoben werden. Siehe meine Antwort zu "wie entfernen ^M" für mehr details.
InformationsquelleAutor der Antwort Ned Batchelder
Müssen Sie fügen Sie das Attribut newline="\n" zu öffnen-Funktion wie diese:
InformationsquelleAutor der Antwort Gregor Ažbe
Können Sie sich vorstellen, die lineterminator='\n' parameter in der csv-writer-Befehl.
InformationsquelleAutor der Antwort Wesam Na
Beachten Sie, dass wenn Sie DictWriter, haben Sie eine neue Linie von der Funktion öffnen und eine neue Zeile aus der writerow Funktion.
Sie können newline=" in die open-Funktion zu entfernen die zusätzlichen Zeilenumbruch.
InformationsquelleAutor der Antwort Erick Stone