2016-11-02 3 views
0

Ich habe eine CSV-Datei mit ein paar hundert Zeilen.Python3 öffnen CSV tun Logik schreiben neue CSV

Um es einfach zu halten, können mit diesen drei Header gehen:

Asignee, ClientName, Lead 

Carl Jr, TestCompany, NO 
James, TestCompany, NO 
Sarah H, TestCompany, NO 
Osvaldo W, OtherCorp, Osvaldo W 
Walter Green, OtherCorp, No 
Ace Ven, PetDick, No 
Dan Marino, PetDick, No 

Also in diesem Szenario in der neuen Datei ich dies möchte

PetDick, No 
TestCompany, No 

geschrieben werden und da die anderen eine haben führen, dass mir diese für diesen Bericht egal sind.

Es können so viele Zeilen in der Datei vorhanden sein, wie die Bearbeiter PER ClientName. Was ich tun muss, ist herauszufinden, welche ClientNames NO führen.

Hier ist, was ich bisher:

import csv 

def createReport(): 
    with open('/home/origReport.csv', 'rt') as origfile, open('/home/newReport.csv', 'wt') as out: 
    reader = csv.DictReader(origfile) 
    writer = csv.writer(out, lineterminator='\n') 
    for row in reader: 
     if row['Lead'] == 'NO': 
     writer.writerow(row["Lead"]) 

createReport() 

Was mich nicht, was ich will in Bezug auf die Ausgabe gibt.

N,O 
N,O 
N,O 

Wenn ich versuche, dies in das Skript zu setzen.

writer.writerow(row["ClientName","Lead"]) 

ich

Traceback (most recent call last): 
File "test2.py", line 15, in <module> 
createReport() 
    File "test2.py", line 12, in createReport 
writer.writerow(row["ClientName","Lead"]) 
KeyError: ('ClientName', 'Lead') 

Aber auch ich weiß nicht, was zu der if-Anweisung hinzuzufügen.

Im Wesentlichen möchte ich jede Zeile finden, wo Lead ein NEIN ist, aber auch, wo der ClientName nicht in einer anderen Zeile existiert, wo Lead ein Name ist (oder im Grunde alles ABER ein NEIN). Wenn Lead für ein und denselben Clientnamen auf einer anderen ROW NICHT NEIN ist, sollte dies in diesem Bericht ausgeschlossen werden.

Vielen Dank im Voraus für einige Hilfe.

Antwort

1

Versuchen

writer.writerow([row["Lead"], row["ClientName"]]) 

writerow ein Array annimmt. Sie haben die erste Ausgabe erhalten, weil Ihre Eingabe row["Lead"] implizit in ["N", "O"] konvertiert wurde;

+0

Danke, dies funktionierte, um die richtige Ausgabe zu erhalten. Irgendwelche Ideen über die Logik .... versuchen, den einfachsten Weg zu finden, dies zu tun. Aber es kommt nicht zu mir. –

+0

Ein einfacher Weg wäre, die Datei zweimal zu durchlaufen oder die Dateien in ein Objekt zu lesen und dann zweimal zu durchlaufen. Erstellen Sie in der ersten Iteration eine Zuordnung , um aufzuzeichnen, ob ein bestimmter clientName mit nicht-NO Lead auftritt, und verwenden Sie in der zweiten Iteration die Zuordnung, um Ihre Logik zu vervollständigen. – yehe

+0

Klingt wie eine gute Lösung ... nicht sicher, wie man eine Karte erstellt. Jetzt googeln –

Verwandte Themen