Verwenden von Regex zum Ersetzen von Dateidaten

9

Mit etwas Hilfe von hier Ich habe das fast so, wie ich es will. Jetzt muss ich in der Lage sein, Daten aus einer Datei zu entfernen, bevor die Dateien verglichen werden .

Der Grund dafür ist, dass die Zeichenfolgen, "Daten", die ich entferne, bekanntermaßen bei jedem Speichern der Datei unterschiedlich sind.

Ich habe eine Regex geschrieben, um den genauen Text auszuwählen, den ich entfernen möchte, aber ich habe Probleme, ihn mit meinem aktuellen Code zu implementieren.

Hier sind die drei Hauptfunktionen

%Vor%

Dies ist die Regex für das Auffinden der zu entfernenden Strings.

%Vor%

BEISPIEL_FILE_BEFORE_DATA_REMOVED:

%Vor%

BEISPIEL_FILE_AFTER_DATA_REMOVED:

%Vor%

Ich habe versucht, etwas wie #filename = re (REMOVE_RE, subst, filename, 0, re.MULTILINE) innerhalb der get_file_info und get_file_info_from_lines zu machen, aber ich implementiere es offensichtlich nicht korrekt.

Jede Hilfe wäre willkommen, da ich gerade lerne.

Ausführen des Vergleichs:

%Vor%

Ich möchte die aktuelle Datei nicht ändern. Wenn all dies im Speicher ausgeführt werden kann oder eine temporäre Datei wäre großartig.

VOLLER CODE:

%Vor%     
NineTail 31.01.2017, 20:07
quelle

3 Antworten

0

Ich konnte einen Weg in der Regex finden. Ich lösche einfach die Zeilen, indem ich die Zeile abgleiche.

%Vor%     
NineTail 24.02.2017, 17:21
quelle
0

In get_file_info_from_lines , ignoriere einfach die Zeile, wenn sie mit deinem regulären Ausdruck übereinstimmt. Auf diese Weise müssen Sie die Datei nicht wirklich ändern oder eine andere Datei erstellen, Sie berechnen einfach den Hash mit den tatsächlich relevanten Zeilen.

%Vor%     
lufte 17.02.2017 17:35
quelle
0

Hallo, ich schlage vor, dass Sie den folgenden Ansatz verwenden: Verwenden Sie eine Funktion, um eine Linie zu säubern. Die Prozesslinien, um die leeren zu entfernen.

Verwenden Sie dann Difflib zum Vergleichen. Verwenden Sie python -m doctest file.py , um doctest

zu überprüfen %Vor%     
cgte 24.02.2017 08:40
quelle

Tags und Links