real - write csv python




Python 2 CSV writer genera un terminatore di riga errato su Windows (2)

In Python 2.x, apri sempre il tuo file in modalità binaria , come documentato. csv scrive \r\n come previsto, ma poi il meccanismo del file di testo di Windows sottostante interviene e cambia \n in \r\n ... effetto totale: \r\r\n

Dalla documentazione csv.writer :

Se csvfile è un oggetto file, deve essere aperto con il flag 'b' sulle piattaforme in cui ciò fa la differenza.

Sembra esserci qualche reticenza riguardo al pronunciare il nome del colpevole principale :-)

Secondo la sua documentazione, csv.writer dovrebbe usare '\ r \ n' come lineterminatore per impostazione predefinita.

import csv

with open("test.csv", "w") as f:
    writer = csv.writer(f)

    rows = [(0,1,2,3,4),
           (-0,-1,-2,-3,-4),
           ("a","b","c","d","e"),
           ("A","B","C","D","E")]           

    print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n")
    writer.writerows(rows)
    print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n")

Questo stampa

\r\n
\r\n

come previsto. Ma il file csv creato usa il lineterminatore '\ r \ r \ n'

0,1,2,3,4

0,-1,-2,-3,-4

a,b,c,d,e

A,B,C,D,E

È un bug o c'è qualcosa di sbagliato nel mio utilizzo di csv.writer?

Versione Python:

ActivePython 2.6.2.2 (ActiveState Software Inc.) basato su Python 2.6.2 (r262: 71600, 21 aprile 2009, 15:05:37) [MSC v.1500 32 bit (Intel)] su win32

su Windows Vista


Per cambiare il terminatore di riga in Python 2.7 csv writer usa

writer = csv.writer(f, delimiter = '|', lineterminator='\n')

Questo è un modo molto più semplice per cambiare il delimitatore predefinito da \ r \ n.







line-endings