Nota: Parece que esta no es la solución preferida debido a cómo se agregó la línea adicional en un sistema Windows. Como se indica en el documento de Python :
Si csvfile es un objeto de archivo, debe abrirse con el indicador 'b' en las plataformas donde eso marca la diferencia.
Windows es una de esas plataformas donde eso hace la diferencia. Si bien cambiar el terminador de línea como describí a continuación puede haber solucionado el problema, el problema podría evitarse por completo abriendo el archivo en modo binario. Se podría decir que esta solución es más "elegante". "Jugar" con el terminador de línea probablemente habría resultado en un código no portable entre sistemas en este caso, donde abrir un archivo en modo binario en un sistema Unix no tiene ningún efecto. es decir. da como resultado un código compatible de sistema cruzado.
De Python Docs :
En Windows, 'b' agregado al modo abre el archivo en modo binario, por lo que también hay modos como 'rb', 'wb' y 'r + b'. Python en Windows distingue entre archivos de texto y binarios; Los caracteres de fin de línea en los archivos de texto se alteran automáticamente ligeramente cuando se leen o escriben los datos. Esta modificación detrás de escena de los datos de archivos está bien para los archivos de texto ASCII, pero corromperá datos binarios como ese en archivos JPEG o EXE. Tenga mucho cuidado de usar el modo binario al leer y escribir dichos archivos. En Unix, no está de más agregar una 'b' al modo, por lo que puede usarlo independientemente de la plataforma para todos los archivos binarios.
Original :
Como parte de los parámetros opcionales para csv.writer, si obtiene líneas en blanco adicionales, es posible que deba cambiar el terminador de línea (información aquí ). Ejemplo a continuación adaptado de la página de Python csv docs. Cámbielo de '\ n' a lo que sea. Como esto es solo una puñalada en la oscuridad del problema, esto puede o no funcionar, pero es mi mejor suposició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'])