2017-11-22 5 views
0

Ich versuche, über mehrere Listen zu iterieren und speichern sie als CSV-Dateien in einer Tabelle zu öffnen, mit der ersten Liste seine Werte hinzufügen zu den Spalten 1, 2 und 3, und die zweite Liste addiert ihre Werte zu den Spalten 4, 5, 6. Ich bekomme stattdessen Zeile 1 von Liste eins die len (Liste 2) Anzahl von Malen und dann die zweite Zeile von Liste 2 das gleiche und so weiter. Liste 2 wird normal ausgedruckt und druckt erneut, sobald die zweite Zeile der Liste 1 endgültig gedruckt wird. Hoffentlich habe ich das gut genug erklärt. Python 3.6. Wie wiederhole ich mehrere Listen in einer for-Schleife und schreibe sie in eine CSV-Datei mit DictWriter()

ixl_file = open('ixalan.txt', 'r') 
ixl_card = [] 
ixl_price = [] 
ixl_quantity = [] 
for line in ixl_file: 
    info = line.split("|") 
    ixl_card.append(info[0]) 
    ixl_price.append(info[1]) 
    ixl_quantity.append(info[2]) 
ixl_file.close() 

kal_file = open('kaladesh.txt', 'r') 
kal_card = [] 
kal_price = [] 
kal_quantity = [] 
for line in kal_file: 
    info = line.split("|") 
    kal_card.append(info[0]) 
    kal_price.append(info[1]) 
    kal_quantity.append(info[2]) 
kal_file.close() 

with open('card_kingdom.csv', 'w', newline='') as ixl: 
     fieldnames = ['Col 1', 'Col 2', 'Col 3', 'Col 4', 'Col 5', 'Col 6'] 
    writer = csv.DictWriter(ixl, fieldnames=fieldnames) 
    writer.writeheader() 

„“ „Unten ist, wo ich Probleme hinzufügen im gewünschten Format diese beiden Liste habe“ „“

for a,b in itertools.product(range(len(ixl_card)), range(len(kal_card))): 
     writer.writerow({'Col 1': ixl_card[a], 
         'Col 2': ixl_price[a], 
         'Col 3': ixl_quantity[a], 
         'Col 4': kal_card[b], 
         'Col 5': kal_price[b], 
         'Col 6': kal_quantity[b] 
         }) 

Ihre Hilfe wäre sehr willkommen! Lassen Sie es mich wissen, wenn Sie den Rest des Codes benötigen. Vielen Dank!!

+2

Ein kleines Beispiel Ihrer zwei Eingabedateien und wie Ihre Ausgabedatei aussehen sollte, wäre hilfreich. –

+0

Sie erhalten dieses Ergebnis, weil 'itertools.product()' funktioniert. Können Sie weitere Details zu dem hinzufügen, was Sie erreichen möchten? –

Antwort

0

Dies ist nur eine normale CSV Schriftsteller getan werden könnte, mit wie alle Ihre Spalten in der gleichen Reihenfolge zu sein scheinen:

import csv  

with open('ixalan.txt', newline='') as f_ixalan: 
    ixalan = list(csv.reader(f_ixalan, delimiter='|')) 

with open('kaladesh.txt', newline='') as f_kaladesh: 
    kaladesh = list(csv.reader(f_kaladesh, delimiter='|')) 

with open('card_kingdom.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output) 
    csv_output.writerow(['Col 1', 'Col 2', 'Col 3', 'Col 4', 'Col 5', 'Col 6']) 

    for p1, p2 in zip(ixalan, kaladesh): 
     csv_output.writerow(p1 + p2) 

können auch Ihre zwei .txt Dateien für die Verwendung eines csv.reader() durch eine | Angabe gelesen werden das Trennzeichen. Wenn Sie zip() verwenden, wird aus jeder Ihrer beiden Eingabelisten eine Zeile ausgewählt. Diese können dann kombiniert und in Ihre CSV-Ausgabe geschrieben werden.

+0

Vielen Dank! Das war sehr hilfreich. Schöne Ferien! – juju

Verwandte Themen