2017-06-09 7 views
1

Ich habe eine sehr große CSV-Datei mit mehr als 50K Einträge und steigend. Meine Datei hat folgende Struktur:Der beste Weg, um Element in CSV Python zu finden

ID;name;battery;... 
    101;a,3.3;... 
    102;b,3.3;... 
    103;c,3.2;... 

Ich weiß, wie eine CSV-Datei in Python zu lesen, aber ich möchte wissen, was der beste Weg, wenn ein neuer Eintrag in der CSV-Datei zu finden sein könnte, eine neue zu vermeiden umschreiben Linie.

Ich war so etwas wie dies zu tun:

if new_id in open(log.csv).read(): 

Jede Hilfe oder Ratschläge wäre sehr geschätzt.

EDIT: Ich wurde von ID filtern möchten

+0

Haben Sie, wenn die ganze Zeile überprüfen möchten '103 ; c, 3.2, ... 'ist in der Datei oder nur die 'id'? –

+2

Was meinen Sie mit 'um das Umschreiben einer neuen Zeile zu vermeiden? – user3764893

+2

Ich rieche hier ein [XY-Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Was genau versuchst du zu tun? – ozgur

Antwort

1

Die gute Möglichkeit zur Vermeidung von Wiederholungen ist spezielle Datenstruktur zu verwenden, für die Suche optimiert. In Python können Sie beispielsweise set() verwenden. set() basiert auf Hash-Tabellen und bietet Suche mit Zeitkomplexität O(n). Das Schema ist wie folgt:

Lesen Sie die vorhandenen IDs aus der Datei in set():

file = open('log.csv', 'rw') 
# include only ids to set: 
entries = set(i.split(',')[0] for i in file.readlines()[1:]) 

Zustand prüfen jede neue Zeile einfügen:

# new_entry - is a new line 
new_id = new_entry.split(',')[0] # get new id 
if new_id not in entries: 
    file.write(new_entry) # Maybe newline appending is needed 
    entries.add(new_id) # Update a set of existing rows 
Verwandte Themen