2016-04-11 16 views
0

I-Daten haben, die wie unten aussieht:Schreiben Liste von Listen richtig CSV

(['string1', 'string2', 'string3', 'string4'], ['string5'], ['string6', 'string7', 'string8', 'string9', 'string10', 'string11', 'string12'] 

, die in einer Liste drei Listen ist.

Was ich versuche zu tun, zu schreiben ...

  1. Alle drei Listen in einer Reihe

  2. Die Saiten als Spalten, so etwas wie:

    string1 | string2 | string3 | string4 | string5 | string6 | string7 | ... 
    

und so weiter.

Ich habe versucht:

with open('output-file.csv', 'wb') as csv_file: 
    writer = csv.writer(csv_file) 
    for row in rows_to_write: 
     writer.writerows(row) 

aber danach die Ausgabe wie folgt aussieht:

string1 | string2 | string3 | string4 
string5 | 
string6 | string7 | ... 

Wie verwalte ich die beiden folgenden Zeilen in die erste Reihe zu setzen?

+1

Suche nach "Liste Python abzuflachen". –

Antwort

0

Lutz Horn richtig ist. Sie müssen die Liste reduzieren, bevor Sie in CSV schreiben. Eine Möglichkeit, es zu tun, würde so aussehen:

row = [] 
for x in (['string1', 'string2', 'string3', 'string4'], ['string5'], ['string6', 'string7', 'string8', 'string9', 'string10', 'string11', 'string12']): 
    row = row + x 
+0

Lutz Horns Kommentar nicht erkannt. Aber danke euch beiden! Funktioniert wie Charme – thedude

0

Ich denke, Sie können die Liste zuerst vor dem Schreiben kombinieren, nicht sicher, ob das was Sie wollen.

listall = [[1, 2, 3],[4, 5, 6],[4, 5, 6]] 
listmerge = [] 
for row in listall: 
    listmerge = listmerge+row 
print listmerge 

with open('output-file.csv', 'wb') as csv_file: 
    writer = csv.writer(csv_file) 
    for row in listmerge: 
     writer.writerows(row) 
0

Ich denke, der einfachste Weg ist, es in eine einzige Liste zu konvertieren und dann verwenden Sie Ihren csv Writer-Code.

l = ['string1', 'string2', 'string3', 'string4'], ['string5'], ['string6', 'string7', 'string8', 'string9', 'string10', 'string11', 'string12'] 

_l = [k for sublist in l for k in sublist] 

with open('output_file.csv','w+') as f: 
    writer = csv.writer(f, delimiter='|') 
    writer.writerow(_l) 

Nun ist die output_file.csv sieht aus wie string1|string2|string3|string4|string5|string6|string7|string8|string9|string10|string11|string12

0

Wenn Sie nur eine einzelne Zeile möchten, können Sie den folgenden Ansatz nehmen könnte:

from itertools import chain 

data = (['string1', 'string2', 'string3', 'string4'], ['string5'], ['string6', 'string7', 'string8', 'string9', 'string10', 'string11', 'string12']) 

with open('output-file.csv', 'wb') as csv_file: 
    writer = csv.writer(csv_file) 
    writer.writerow(list(chain.from_iterable(data))) 

Sie Ihre Ausgabe csv Geben Sie wie folgt vor:

string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12 

Wenn Sie die ändern möchten csv Trennzeichen |, könnten Sie verwenden:

writer = csv.writer(csv_file, delimiter='|') 
0

Eine andere Variante:

import csv 

mainList = (['string1', 'string2', 'string3', 'string4'], ['string5'], ['string6', 'string7', 'string8', 'string9', 'string10', 'string11', 'string12']) 

with open('eggs.csv', 'w') as csvfile: 
    csv_writer = csv.writer(csvfile, delimiter='|') 
    csv_writer.writerow([val for subList in mainList for val in subList])