Uwaga: Wydaje się, że nie jest to preferowane rozwiązanie ze względu na sposób dodawania dodatkowej linii w systemie Windows. Jak stwierdzono w dokumencie python :
Jeśli plik csv jest obiektem pliku, należy go otworzyć flagą „b” na platformach, na których ma to znaczenie.
Windows to jedna z takich platform, na której to robi różnicę. Chociaż zmiana terminatora linii, jak opisano poniżej, mogła rozwiązać problem, problemu można całkowicie uniknąć, otwierając plik w trybie binarnym. Można powiedzieć, że to rozwiązanie jest bardziej „eleganckie”. „Błąkanie się” za pomocą terminatora linii prawdopodobnie spowodowałoby w tym przypadku niemożliwy do przeniesienia kod między systemami, w którym otwarcie pliku w trybie binarnym w systemie uniksowym nie daje żadnego efektu. to znaczy. powoduje kod kompatybilny z wieloma systemami.
Z Python Docs :
W systemie Windows „b” dołączony do trybu otwiera plik w trybie binarnym, więc istnieją również tryby takie jak „rb”, „wb” i „r + b”. Python w systemie Windows rozróżnia pliki tekstowe i binarne; znaki końca wiersza w plikach tekstowych są automatycznie nieznacznie zmieniane podczas odczytu lub zapisu danych. Ta zakulisowa modyfikacja danych pliku jest odpowiednia dla plików tekstowych ASCII, ale spowoduje uszkodzenie takich danych binarnych w plikach JPEG lub EXE. Podczas odczytu i zapisu takich plików należy bardzo uważać na tryb binarny. W systemie Unix dodanie „b” do trybu nie boli, więc możesz używać go niezależnie od platformy dla wszystkich plików binarnych.
Oryginał :
Jako część opcjonalnych parametrów dla csv.writer, jeśli otrzymujesz dodatkowe puste linie, być może będziesz musiał zmienić lineterminator (informacje tutaj ). Przykład poniżej dostosowany ze strony csv docs strony python . Zmień to z „\ n” na cokolwiek powinno być. Ponieważ jest to po prostu kłótnia w ciemności na problem, to może, ale nie musi działać, ale to moje najlepsze przypuszczenie.
>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), lineterminator='\n')
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])