Hinweis: Es scheint, dass dies nicht die bevorzugte Lösung ist, da die zusätzliche Zeile auf einem Windows-System hinzugefügt wurde. Wie in der Python-Dokument :
Wenn csvfile ein Dateiobjekt ist, muss es auf Plattformen, auf denen das einen Unterschied macht, mit dem Flag 'b' geöffnet werden.
Windows ist eine der Plattformen, bei denen das einen Unterschied macht. Durch das Ändern des Zeilenabschlusses, wie ich es weiter unten beschrieben habe, konnte das Problem zwar behoben werden, aber man könnte es ganz vermeiden, indem man die Datei im Binärmodus öffnet. Man könnte sagen, dass diese Lösung "eleganter" ist. Das "Herumspielen" mit dem Zeilenterminator hätte in diesem Fall wahrscheinlich zu nicht portierbarem Code zwischen verschiedenen Systemen geführt, während das Öffnen einer Datei im Binärmodus auf einem Unix-System keine Auswirkungen hat, d. h. es führt zu systemübergreifend kompatiblem Code.
Von Python-Dokumente :
Unter Windows öffnet ein 'b' an den Modus angehängt die Datei im Binärmodus geöffnet, so dass gibt es auch Modi wie 'rb', 'wb', und 'r+b'. Python unter Windows macht einen Unterscheidung zwischen Text- und Binär Dateien; die Zeilenendezeichen in Textdateien werden automatisch leicht verändert leicht verändert, wenn Daten gelesen oder geschrieben werden. Diese hinter den Kulissen stattfindende Modifikation von Dateidaten ist in Ordnung für ASCII-Textdateien Dateien in Ordnung, aber sie beschädigt binäre Daten wie die in JPEG- oder EXE-Dateien. Seien Sie sehr vorsichtig sein, den Binärmodus zu verwenden, wenn beim Lesen und Schreiben solcher Dateien. Unter Unix schadet es nicht, ein 'b' an den Modus anzuhängen an den Modus anzuhängen, damit Sie ihn verwenden können plattformunabhängig für alle binären Dateien verwenden können.
Original :
Als Teil der optionalen Parameter für den csv.writer, wenn Sie zusätzliche Leerzeilen erhalten, müssen Sie möglicherweise den Linienterminator ändern (info aquí ). Das folgende Beispiel wurde von der Python-Seite übernommen csv-Dokumente. Ändern Sie es von ' \n ' zu dem, was es sein sollte. Da dies nur ein Stich im Dunkeln auf das Problem kann dies oder nicht funktionieren, aber es ist meine beste Vermutung.
>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), lineterminator='\n')
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])