2017-11-07 2 views
0

Ich habe 2 csv-Dateien, die ich über Python generieren. Die Datensätze sind unten (a.csv und b.csv). b.csv hat 2 Zeilen und die Werte in der zweiten Zeile können Duplikate sein. Ich möchte ein Ergebnis wie final.csv haben. Wie kann ich das machen?create csv aus verschiedenen Dateien mit Python

Ich versuchte unten Code, aber das ist nicht richtig. Ich mache nicht den richtigen Vergleich. Jede Hilfe wäre großartig.

a.csv

"all","1","1Gi","4","8Gi" 
"als","0","0","100m","128Mi" 
"awx","6","9Gi","20","32Gi" 
"cho-1","9","9728Mi","15","20Gi" 
"cho-2","12250m","15395Mi","20","24Gi" 

b.csv

"all","ABC" 
"als","ABC" 
"awx","DPL" 
"cho-1","ABC" 
"cho-2","ABC" 
"cho-3","ABC" 

Ich möchte eine Datei erstellen, aus beiden wie unten

final.csv

"all","1","1Gi","4","8Gi","ABC" 
"als","0","0","100m","128Mi","ABC" 
"awx","6","9Gi","20","32Gi","DPL" 
"cho-1","9","9728Mi","15","20Gi","ABC" 
"cho-2","12250m","15395Mi","20","24Gi","ABC" 

mein Code:

csv1 = csv.reader(open("reports/a.csv", "r")) 
csv2 = csv.reader(open("reports/b.csv", "r")) 
s=[] 

while True: 
    try: 
     line1 = csv1.next() 
     line2 = csv2.next() 

     if (line1[0] == line2[0]): 
      s.append([line1[1], line2[0], line2[1], line2[2], line2[3], line2[4]]) 
     else: 
      s.append(["NA", line2[0], line2[1], line2[2], line2[3], line2[4]]) 
    except StopIteration: 
     break 

Antwort

1

Ich nahm in diesem Szenario Hilfe von Pandas.

df0 = pd.read_csv("a.csv") 
df1 = pd.read_csv("b.csv") 
df1=df1.dropna(axis=1) 
df1 = df1.merge(df0, on='Name', how='outer') 
df1.to_csv("final.csv", index=True) 
0

von Ihrer erwarteten Ausgabe, ich denke, dass Sie Set verwenden sollten. Da die Variablen line1 und line2 durch Kommata getrennte Werte enthalten, können Sie aus diesen Werten eine Liste erstellen. Wie,

line1 = ["all","1","1Gi","4","8Gi"] 
line2 = ["all","ABC"] 

Sie können diese beiden Listen dann zu einer einzigen Liste zusammenführen und daraus einen Satz machen. So würde das Set aussehen,

set1 = set(line1.extend(line2)) 

machen einen Satz wird die Duplikate entfernen. Hoffe, das hilft.

0

Sie wurden nicht weit von einer Lösung, man muss nur Daten anhängen von line2 zu line1 und verwenden es:

... 
csvout = csv.writer(open("final.csv", "wb"), quoting = csv.QUOTE_ALL) 
while True: 
    try: 
     line1 = csv1.next() 
     line2 = csv2.next() 
     if line1[0] != line2[0]: # control same first field 
      raise Exception("Desynch", line1[0], '#', line2[0]) 
     line1.append(line2[1])  # append field from b.csv 
     csvout.writerow(line1)  # and write it to final.csv 
    except StopIteration: 
     break 
Verwandte Themen