So löschen Sie Zeilen CSV in Python

8

Ich versuche, zwei csv-Dateien (DateiA und DateiB) zu vergleichen und alle Zeilen aus DateiA zu entfernen, die nicht in DateiB gefunden werden. Ich möchte in der Lage sein, dies zu tun, ohne eine dritte Datei zu erstellen. Ich dachte, ich könnte dies mit dem csv-Writer-Modul tun, aber jetzt bin ich zweite Rate selbst.

Derzeit verwende ich den folgenden Code, um meine Vergleichsdaten aus Datei B aufzuzeichnen:

%Vor%

Hier stehe ich fest und weiß nicht, wie ich die Zeilen löschen soll:

%Vor%     
justin 29.04.2013, 04:46
quelle

3 Antworten

7

Diese Lösung verwendet fileinput mit inplace=True , das in eine temporäre Datei schreibt und dann Benennt es am Ende automatisch in Ihren Dateinamen um. Sie können Zeilen nicht aus einer Datei entfernen, aber Sie können sie nur mit den gewünschten Zeilen überschreiben.

  

Wenn das Schlüsselwortargument inplace=1 an fileinput.input() oder an den Konstruktor FileInput übergeben wird, wird die Datei in eine Sicherungsdatei verschoben, und die Standardausgabe wird an die Eingabedatei geleitet (wenn eine Datei mit demselben Namen wie Die Sicherungsdatei ist bereits vorhanden. Sie wird automatisch ersetzt. Dies macht es möglich, einen Filter zu schreiben, der seine Eingabedatei an Ort und Stelle neu schreibt.

DateiA

%Vor%

DateiB

%Vor% %Vor%

DateiA

%Vor%     
jamylak 29.04.2013, 05:04
quelle
3

CSV ist kein Datenbankformat. Es wird als Ganzes gelesen und geschrieben. Sie können keine Zeilen in der Mitte entfernen. Die einzige Möglichkeit, dies zu tun, ohne eine dritte Datei zu erstellen, besteht darin, die Datei vollständig in den Speicher einzulesen und dann ohne die störenden Zeilen auszugeben.

Aber im Allgemeinen ist es besser, eine dritte Datei zu verwenden.

    
Lennart Regebro 29.04.2013 04:51
quelle
3

Wie von Lennart beschrieben, können Sie eine CSV-Datei nicht direkt ändern, während Sie darüber iterieren.

Wenn Sie wirklich dagegen sind, eine dritte Datei zu erstellen, sollten Sie einen Zeichenfolgenpuffer mit verwenden StringIO , die Idee ist, dass Sie den neuen gewünschten Inhalt der Datei A im Speicher aufbauen. Am Ende des Skripts können Sie den Inhalt des Puffers über die Datei A schreiben.

%Vor%     
David Cain 29.04.2013 04:53
quelle