2017-10-06 2 views
1

Ich bin auf der Suche nach doppelten Dateien durch den Dateinamen vergleichen.String vergleichen in Python

Allerdings habe ich festgestellt, einige Pfade von os.walk zurückgegebene Zeichen zurückgeben. Zum Beispiel kann ich structure in the Earth\'s core.pdf für eine Datei und structure in the Earth\xe2\x80\x99s core.pdf für eine andere erhalten.

In [1]: print 'structure in the Earth\'s core.pdf\nstructure in the Earth\xe2\x80\x99s core.pdf' 
structure in the Earth's core.pdf 
structure in the Earth’s core.pdf 

In [2]: 'structure in the Earth\'s core.pdf' == 'structure in the Earth\xe2\x80\x99s core.pdf' 
Out[2]: False 

Wie gehe ich mit diesen Fällen um?

==== einfach die Q in Reaktion auf die Kommentare zu klären, gibt es auch andere Situationen für doppelte Dateien wie

  • einen Dateinamen mehr Räume als die andere
  • einen Dateinamen enthält, getrennt durch - während die andere durch :
  • ein Dateiname Japanisch/Chinesisch Wörter und die andere besteht aus Ziffern und Japanisch/Chinesisch Wort ...
+0

sie sind zwei verschiedene Zeichen ... '' 'ist nicht gleich' ''. Sie ersetzen eins durch das andere oder vergleichen nur die Alpha-Numerik eines gegebenen Satzes. – kaza

+1

Sie sind nicht die * gleichen *, weil sie unterschiedliche Codierung verwenden, um die gleiche _general_ visuelle Erscheinung zu erstellen. c.f. [this] (https://stackoverflow.com/questions/32761954/how-to-decode-an-ascii-string-with-backslash-x-x-codes) Link für eine ähnliche Diskussion. Sie sind verschiedene Charaktere, wie @bulbus Notizen. Das zu beheben ist kompliziert, da es eine Dose Würmer öffnet, die zeigen, wie viele Möglichkeiten es gibt, etwas zu sagen, das intellektuell ähnlich ist, aber nicht buchstäblich dasselbe ist. –

+0

Sie könnten versuchen, sie auf "Wörterbuch" -Darstellung herunterzukochen, alle nicht-alphanumerischen Zeichen vor dem Vergleich zu streichen und einen Bericht zu schreiben. –

Antwort

1

Vielleicht können Sie die Ähnlichkeit der Strings anstelle einer genauen Übereinstimmung erhalten. Holen Sie sich die genaue Übereinstimmung kann wegen einfacher Dinge wie Großschreibung problematisch sein.

Ich schlage vor, die folgenden:

from difflib import SequenceMatcher 

s1 = "structure in the Earth\'s core.pdf" 
s2 = "structure in the Earth\xe2\x80\x99s core.pdf" 

matcher = SequenceMatcher() 
matcher.set_seqs(s1, s2) 
print(matcher.ratio()) 
# 0.9411764705882353 

Dieses Ergebnis zeigt, dass die Ähnlichkeit zwischen den beiden Saiten mehr als 94% beträgt. Sie können einen Schwellenwert zum Löschen oder Überprüfen der Elemente vor dem Löschen definieren.