Hinweis: Dies scheint nicht die bevorzugte Lösung zu sein, da die zusätzliche Zeile auf einem Windows-System hinzugefügt wurde. Wie im Python-Dokument angegeben :
Wenn csvfile ein Dateiobjekt ist, muss es auf Plattformen, auf denen dies einen Unterschied macht, mit dem Flag 'b' geöffnet werden.
Windows ist eine solche Plattform, auf der dies einen Unterschied macht. Während das Ändern des Zeilenabschlusses, wie unten beschrieben, das Problem möglicherweise behoben hat, kann das Problem insgesamt vermieden werden, indem die Datei im Binärmodus geöffnet wird. Man könnte sagen, diese Lösung ist "eleganter". Das "Fummeln" mit dem Zeilenabschluss hätte in diesem Fall wahrscheinlich zu nicht portierbarem Code zwischen Systemen geführt, wobei das Öffnen einer Datei im Binärmodus auf einem Unix-System keine Auswirkungen hat. dh. Dies führt zu systemübergreifendem Code.
Aus Python-Dokumenten :
Unter Windows öffnet 'b', das an den Modus angehängt ist, die Datei im Binärmodus, daher gibt es auch Modi wie 'rb', 'wb' und 'r + b'. Python unter Windows unterscheidet zwischen Text- und Binärdateien. Die Zeilenendezeichen in Textdateien werden beim Lesen oder Schreiben von Daten automatisch geringfügig geändert. Diese Änderung der Dateidaten hinter den Kulissen ist für ASCII-Textdateien in Ordnung, beschädigt jedoch Binärdaten wie JPEG- oder EXE-Dateien. Achten Sie beim Lesen und Schreiben solcher Dateien sehr darauf, den Binärmodus zu verwenden. Unter Unix schadet es nicht, ein 'b' an den Modus anzuhängen, sodass Sie es plattformunabhängig für alle Binärdateien verwenden können.
Original :
Als Teil der optionalen Parameter für den csv.writer müssen Sie möglicherweise den Liniensterminator ändern, wenn Sie zusätzliche Leerzeilen erhalten (Informationen hier ). Beispiel unten aus der Python-Seite CSV-Dokumente angepasst . Ändern Sie es von '\ n' in das, was es sein sollte. Da dies nur ein Stich in die Dunkelheit bei dem Problem ist, kann dies funktionieren oder auch nicht, 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'])