2015-02-02 16 views
9

Ho il seguente codice sorgente, dove sto cercando di scrivere una lista in un file csv. Ho bisogno che ogni nuova lista sia scritta in una nuova riga di questo file csv. Il codice sorgente è il seguente:Scrivere una lista in un file csv python, una nuova riga per lista

import csv 
list1=[55,100,'dir1/dir2/dir3/file.txt',0.8] 

resultFile = open("output.csv",'wa') 
wr = csv.writer(resultFile, dialect='excel') 
wr.writerow(list1) 
resultFile.close() 

Il problema è che non inserisce lista1 in un ritorno a capo ogni volta che esegue il codice.

In MATLAB che sarebbe facile, ho solo bisogno di usare dlmwrite con il parametro '-append'.

Ma come farlo in Python?

+3

Do 'close()' il tuo file alla fine –

+3

In alternativa, usa 'con open ('output.csv', 'wa') come resultFile:' – meshy

+0

@BhargavRao ho dimenticato di incollare la parte del codice che ho chiudi il file. L'ho aggiornato. Ancora non funziona. Ho aggiornato il codice sopra. – mad

risposta

19

Aprire il file in modalità di aggiunta.

import csv 
list1=[58,100,'dir1/dir2/dir3/file.txt',0.8] 

with open("output.csv", "a") as fp: 
    wr = csv.writer(fp, dialect='excel') 
    wr.writerow(list1) 

Altro su file di open modes

prova seguente: -

>>> with open('test1','wb') as f: f.write('test') 
... 
>>> with open('test1','ab') as f: f.write('koko') 
... 
>>> with open('test1','rb') as f: f.read() 
... 
'testkoko' 
>>> with open('test1','wa') as f: f.write('coco') 
... 
>>> with open('test1','rb') as f: f.read() 
... 
'coco' 
>>> 

Da questo link

Modi: Descrizione

  1. r: Apre un file in sola lettura. Il puntatore del file si trova all'inizio del file. Questa è la modalità di default.
  2. rb: Apre un file per la lettura solo in formato binario. Il puntatore del file si trova all'inizio del file. Questa è la modalità di default.
  3. r +: Apre un file sia per la lettura che per la scrittura. Il puntatore del file sarà all'inizio del file.
  4. rb +: Apre un file per la lettura e la scrittura in formato binario. Il puntatore del file sarà all'inizio del file.
  5. w: Apre un file solo per scrittura. Sovrascrive il file se il file esiste. Se il file non esiste, crea un nuovo file per la scrittura.
  6. wb: Apre un file per la scrittura solo in formato binario. Sovrascrive il file se il file esiste. Se il file non esiste, crea un nuovo file per la scrittura.
  7. w +: Apre un file sia per la scrittura che per la lettura. Sovrascrive il file esistente se il file esiste. Se il file non esiste, crea un nuovo file per la lettura e la scrittura.
  8. wb +: Apre un file sia per la scrittura che per la lettura in formato binario. Sovrascrive il file esistente se il file esiste. Se il file non esiste, crea un nuovo file per la lettura e la scrittura.
  9. a: Apre un file per l'aggiunta. Il puntatore del file si trova alla fine del file se il file esiste. Cioè, il file è in modalità append. Se il file non esiste, crea un nuovo file per la scrittura.
  10. ab: Apre un file per l'aggiunta in formato binario. Il puntatore del file si trova alla fine del file se il file esiste. Cioè, il file è in modalità append. Se il file non esiste, crea un nuovo file per la scrittura.
  11. a +: Apre un file per l'aggiunta e la lettura. Il puntatore del file si trova alla fine del file se il file esiste. Il file si apre in modalità append. Se il file non esiste, crea un nuovo file per la lettura e la scrittura.
  12. ab +: Apre un file per l'aggiunta e la lettura in formato binario. Il puntatore del file si trova alla fine del file se il file esiste. Il file si apre in modalità append. Se il file non esiste, crea un nuovo file per la lettura e la scrittura.
+0

Funziona, grazie. Credo davvero che l'ho fatto prima e non ha funzionato. Grazie comunque. – mad

+0

Anche il file deve essere aperto con il flag 'b' sulle piattaforme in cui ciò fa la differenza, come menzionato nella documentazione di [' csv.writer'] (https://docs.python.org/2/library/csv .html # csv.writer). –

+0

@CristianCiupitu Ho provato il tuo codice, tuttavia scrive ogni nuova riga non nella riga sottostante, ma in due sotto. In modo che alla fine ho sempre una riga vuota tra due righe con i dati. Come posso ripararlo? –

0

Se si utilizza Python 3.x quindi modificare il codice:

import csv 

list1 = [58,100,'dir1/dir2/dir3/file.txt',0.8] 

with open("output.csv", "a", newline='') as fp: 
    wr = csv.writer(fp, dialect='excel') 
    wr.writerow(list1) 

Aggiunta newline='' può aiutare a evitare di ottenere nuove linee extra, righe vuote tra due file con i dati.

Problemi correlati