2016-04-25 7 views
1

Druckbefehl zeigt mir so etwas in .csv (I mehr als 3 Zeilen haben, aber dies ist nur beispiel Teil):Speichern Sie die gleiche Inhaltsdatei als Druckbefehl

O;4;Line[63];CPUA.DB1610.4122,X1;RW 
V;5;Enable_maintenance_mode;; 
V;5;Maintenance_start_motor;CPUA.DB1610.4124,X0;RW 
O;4;Line[64];CPUA.DB1610.4124,X1;RW 

Ich versuche speichern der gleiche Inhalt in der CSV-Datei, aber auf CSV Ich habe nur eine Zeile und dieses Format. Die Frage ist, wie in der CSV-Datei zu speichern, was Druck zeigt?

O,;,4,;,L,i,n,e,[,6,4,],;,C,P,U,A,.,D,B,1,6,1,0,.,4,1,2,4,|,|,X,1,;,R,W 

Sie sparen mich nur eine Zeile auf CSV-Datei

Dies ist mein Code:

for i in range((len(result)-1)): 
print(str(result[i][0]) + ';' + str(result[i][1]) + ';' + result[i][2] + ';' + str(adress[i])) 
with open(source_file[:-4] + '_test.csv', "w") as f: 
    writer = csv.writer(f) 
    writer.writerow(str(result[i][0]) + ';' + str(result[i][1]) + ';' + result[i][2] + ';' + str(adress[i])) 

Ich weiß nicht, was ich falsch mache. Kann mir jemand helfen, dieses Problem zu lösen?

Ergebnis enthält:

['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4124.0", 'B', 'RW', '0', "0']"] 
['V', '5', 'Maintenance_start_motor', "S7:[CPUA]DB1610', 'X4124.1", 'B', 'RW', '0', "0']"] 
['O', '4', 'Line[64]', '', '', "']"] 
['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4126.0", 'B', 'RW', '0', "0']"] 

@ Martin Evans Ihr Beispiel richtig gut aussehen. Aber ich brauche nur einen Teil der Zeile von Ergebnis und speichern Sie als CSV. Kann ich sowas machen?

csv_output = csv.writer(f_output, lineterminator='\n') 
for line in result: 
#csv_output.writerow(line) 
csv_output.writerow(str(result[line][0]) + ';' + str(result[line][1]) + ';' + result[line][2] + ';' + str(adress[line])) 

Aber ich habe Fehler: Typeerror: Liste Indizes müssen ganze Zahlen sein, nicht auflisten

+0

Was ist "Ergebnis"? –

+1

Ich bin aktualisiert meine Frage, welches Ergebnis enthält. – Luk

+0

Ist "Ergebnis" eine Zeichenfolge oder eine Liste von Listen? –

Antwort

2

Die csv-Bibliothek wurde entwickelt, um eine Liste von Spalteneinträge zu nehmen und sie automatisch in eine ganze CSV-Zeile zu konvertieren, indem die Zugabe notwendige Trennzeichen für Sie. Ihre print-Anweisung simuliert dies durch Anhängen der ; zwischen jedem Spalteneintrag. Sie können das Trennzeichen festlegen, zu verwenden, wenn die csv.writer, in Ihrem Beispiel zu schaffen dies ;:

import csv 

result = [ 
    ['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4124.0", 'B', 'RW', '0', "0']"], 
    ['V', '5', 'Maintenance_start_motor', "S7:[CPUA]DB1610', 'X4124.1", 'B', 'RW', '0', "0']"], 
    ['O', '4', 'Line[64]', '', '', "']"], 
    ['V', '5', 'Enable_maintenance_mode', "S7:[CPUA]DB1610', 'X4126.0", 'B', 'RW', '0', "0']"]] 

address = [ 
    "CPUA.DB1610.4122,X1;RW", 
    "", 
    "CPUA.DB1610.4124,X0;RW", 
    "CPUA.DB1610.4124,X1;RW"] 

with open('output.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output, delimiter=';') 

    for r, a in zip(result, address): 
     csv_output.writerow(r[0:3] + a.split(';')) 

Wenn ein csv.writer() in Python 3.x verwenden, sollten Sie immer öffnen Sie die Datei mit w und setzen newline=''. Außerdem ist es einfacher, Ihre result Einträge direkt zu durchlaufen, ohne range() und Indizierung zu verwenden. Da Sie scheinbar zwei Listen gleicher Länge haben, können Sie zip verwenden, um Ihnen bei der Iteration jeweils ein Element zu geben.

Sie Dies würde eine Ausgabedatei geben Sie wie folgt vor:

V;5;Enable_maintenance_mode;CPUA.DB1610.4122,X1;RW 
V;5;Maintenance_start_motor; 
O;4;Line[64];CPUA.DB1610.4124,X0;RW 
V;5;Enable_maintenance_mode;CPUA.DB1610.4124,X1;RW 

Hinweis, haben Sie Ausgang nicht um eine Probe für address vorgesehen, so wird dies basierend auf Ihrem Beispiel.

+0

Anstatt manuell die Trennzeichen hinzuzufügen, ist es besser, einfach die erforderliche Liste zu erstellen. –

+0

Ihr Beispiel bedeutet, dass Sie versuchen, die ersten beiden Einträge anzuzeigen, und dann die gesamte Zeile erneut? –

+0

Ich bin meine Frage aktualisiert. – Luk

Verwandte Themen