2016-11-10 3 views
0
import csv 

impFileName = [] 
impFileName.append("file_1.csv") 
impFileName.append("file_2.csv") 

expFileName = "MasterFile.csv" 
l = [] 
overWrite = False 
comma = "," 

for f in range(len(impFileName)): 
    with open(impFileName[f], "r") as impFile: 
     table = csv.reader(impFile, delimiter = comma) 

     for row in table: 
      data_1 = row[0] 
      data_2 = row[1] 
      data_3 = row[2] 
      data_4 = row[3] 
      data_5 = row[4] 
      data_6 = row[5] 

     dic = {"one":data_1, "two":data_2, "three":data_3, "four":data_4, "five":data_5, "six":data_6} 

     for i in range(len(l)): 
      if l[i]["one"] == data_1: 
       print("Data, where one = " + data_1 + " has been updated using the data from " + impFileName[f]) 
       l[i] = dic 
       overWrite = True 
       break 

     if overWrite == False: 
      l.append(dic) 
     else: 
      overWrite = False 
    print(impFileName[f] + " has been added to the list 'l'") 

with open(expFileName, "a") as expFile: 
    print("Master file now being created...") 
    for i in range(len(l)): 
     expFile.write(l[i]["one"] + comma + l[i]["two"] + comma + l[i]["three"] + comma + l[i]["four"] + comma + l[i]["five"] + comma + l[i]["six"] + "\r\n") 

print("Process Complete") 

Dieses Programm benötigt 2 (oder mehr) .csv-Dateien und vergleicht die uniqueID (data_1) jeder Zeile mit allen anderen. Wenn sie übereinstimmen, nimmt sie an, dass die aktuelle Zeile eine aktualisierte Version ist, die sie überschreibt. Wenn es keine Übereinstimmung gibt, dann ist es ein neuer Eintrag." r n" wird am Ende der csv-Datei ignoriert

Ich speichere die Daten jeder Zeile in einem Wörterbuch, das dann in der Liste "l" gespeichert wird.

Sobald alle Dateien verarbeitet wurden, gebe ich die Liste "l" an die "MasterFile.csv" im angegebenen Format aus.

--- DAS PROBLEM ---
Die letzte Zeile von "File_1.csv" und die erste Zeile von "File_2.csv" enden in derselben Zeile in der Ausgabedatei. Ich möchte, dass es auf einer neuen Linie weitergeht.

--Visual

... 
data_1,data_2,data_3,data_4,data_5,data_6 
data_1,data_2,data_3,data_4,data_5,data_6DATA_1,DATA_2,DATA_3,DATA_4,DATA_5,DATA_6 
DATA_1,DATA_2,DATA_3,DATA_4,DATA_5,DATA_6 
... 

HINWEIS: Es gibt keine Kopfzeilen in einem der CSV-Dateien.
Ich habe auch versucht, diese nur mit \ n "am Ende der" expFile.write "- Das gleiche Ergebnis

+0

Die letzte Zeile der ersten Datei hat keinen Zeilenumbruch, was nicht ungewöhnlich ist. Sie müssen einen manuell einfügen –

+0

Sicher werde ich sie in der "expFile.Write" Zeile in der Nähe der unteren einfügen - am Ende der 'schreiben' füge ich "\ r \ n" ("\ r" Wagenrücklauf, "\ n "Zeilenvorschub)? – marmitegeek

Antwort

0

A'ight Jungs. Ich glaube, ich habe einen Booboo gemacht.

1) Weil ich am Ende "a" (append) nicht "w" (write) benutzte; und meine letzten 2 oder 3 Tests hatte ich vergessen, die Datei zu löschen, ich schaute immer auf die gleichen (Top 50 oder so) Zeilen. Was bedeutete, dass ich meinen Fehler vor langer Zeit behoben hatte, aber immer noch die alten Daten betrachtete.

2) Zeilenumbrüche wurden in den letzten Wert des Wörterbuchs (data_6) eingelesen, also wenn sie an die Datei angehängt wurden Master-Datei Ich habe am Ende "\ r \ r \ n" gefunden.

Danke Vivek Srinivasan für die Erweiterung meiner Python-Kenntnisse. Ich werde Pandas anschauen und spielen.

Danke an MarianD für den Hinweis auf den Fehler "a"/"w".

Danke an Moses Koledoye für den Fehler "\ r".

Entschuldigung für die Verschwendung Ihrer Zeit.

1

Nur ein kleiner Vorschlag. Zwei Dateien auf Ihre Art zu vergleichen, erscheint zu teuer. Versuchen Sie, pandas auf die folgende Weise zu verwenden.

import pandas 
data1 = pandas.read_csv("file_1.csv") 
data2 = pandas.read_csv("file_2.csv") 

# Merging Two Dataframes 
combinedData = data1.append(data2,ignore_index=True) 

# Dropping Duplicates 
# give the name of the column on which you are comparing the uniqueness 
uniqueData = combinedData.drop_duplicates(["columnName"]) 
0

Ich habe versucht, Ihr Programm zu laufen, und es ist in Ordnung. Ihr Problem ist nur in der Linie

with open(expFileName, "a") as expFile: 

wo Sie "a" (wie append) verwenden, wenn Sie also Ihr Programm immer wieder ausführen, wird es anhängen auf diese Datei.

Verwenden Sie "w" statt "a".

Verwandte Themen