Примітка. Здається, це не є кращим рішенням через те, як додалася додаткова лінія в системі Windows. Як зазначено в документі python :
Якщо csvfile є файловим об'єктом, його потрібно відкрити прапором 'b' на платформах, де це має значення.
Windows - одна з таких платформ, де це має значення. Хоча зміна лінійного термінатора, як я описав нижче, може усунути проблему, проблему можна було б уникнути взагалі, відкривши файл у двійковому режимі. Можна сказати, що це рішення є більш "елегантним". "Спередання" з лінійним термінатором, швидше за все, призвело б до невідповідного коду між системами в цьому випадку, коли відкриття файлу у двійковому режимі в системі Unix не призводить до ефекту. тобто. це призводить до крос-сумісного коду.
З Документів Python :
У Windows, доданий до режиму 'b', відкриває файл у двійковому режимі, тому існують також такі режими, як 'rb', 'wb' та 'r + b'. Python в Windows робить різницю між текстовими та бінарними файлами; символи кінцевих рядків у текстових файлах автоматично незначно змінюються, коли дані читаються чи записуються. Ця закулісна модифікація файлових даних чудово підходить для текстових файлів ASCII, але вона може пошкодити бінарні дані, такі як у файлах JPEG або EXE. Будьте дуже обережні, використовуючи двійковий режим під час читання та запису таких файлів. У Unix не завадить додавати "b" до режиму, тому ви можете використовувати його платформу незалежно для всіх бінарних файлів.
Оригінал :
Як частина додаткових параметрів для csv.writer, якщо ви отримуєте зайві порожні рядки, можливо, вам доведеться змінити lineterminator (інформація тут ). Приклад нижче адаптований зі сторінки python csv docs. Змініть його з "\ n" на те, що має бути. Оскільки це лише удар в темряві при проблемі, це може бути, а може і не спрацювати, але це найкраща здогадка.
>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'w'), lineterminator='\n')
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])