2016-08-08 12 views
-3

Was sollte optimale Implementierung für die beste Übereinstimmung in Python sein.Algorithmus der besten Übereinstimmung in Python

Ich habe eine TXT-Datei, die einige Ländercodes Mapping z.

CODES Name

123 ABC

1234 DEF

1235 GHI

124 JKL

1241 MNO

Diese txt-Datei groß ist (13500 Datensätze) I Ich gebe nur eine Probe.

Weitere Ich habe einige CDR-Dateien, wo ich Ländercode (numerisch) in jedem Datensatz (Zeile), die ich in Ländername konvertieren möchte.

Nun, was ich mit der besten Übereinstimmung meine, sagen, der CDR-Datensatz enthält Ländercode "1234" dann Landesname wäre "DEF", wenn es "1235" ist der Landesname wäre "GHI" aber wenn das Land Code ist "1236", dann schlägt die perfekte Übereinstimmung fehl und es sollte auf "ABC" zurückfallen, da "123" verfügbar ist.

Ich weiß nicht, es gibt einen Standardnamen für diese Art der Suche. wie gierige Suche in regulären Ausdrücken.

Was kann die beste Implementierung für diese Art Suche sein, da die CDR-Dateien wirklich groß sind (bis zu 25 GB).

+0

Es gibt passende viele Ansätze zu nähern. Was "am besten" für Sie ist, hängt von Ihren Kriterien ab, die Sie nicht preisgeben. Wählen zu schließen als zu breit; könnte auch unklar sein, oder in erster Linie auf der Grundlage von Meinungen. Details finden Sie in der [Hilfe]. – tripleee

+0

Fügen Sie den Code ein, den Sie hier versuchen. – Trimax

+0

@Trimax - Nun, ich bin noch für den gleichen Code. Ich dachte nur daran, eine Annäherung zu bekommen. Was ich bisher gedacht habe, ist das Sortieren (nach Ländercodes) der Inhalte der TXT-Datei in eine Tupel-Liste. Dann suchen Sie mit vollem Ländercode in die Liste, wenn die Übereinstimmung fehlschlägt, suchen Sie die Liste erneut, entfernen Sie die letzte Ziffer und so weiter. Gibt es einen besseren Weg? – jagpreet

Antwort

-1

Wörterbücher sind der einfachste Weg, dies zu implementieren. Siehe unten Lösung:

  1. konvertieren

123 ABC

1234 DEF

1235 GHI

124 JKL

1241 MNO

zu {1241: 'MNO', 1234: 'DEF', 123: 'ABC', 124: 'JKL', 1235: 'GHI'}

  1. lesen CDR-Datei mit Ländercodes und suchen Sie dann im Wörterbuch
  2. , wenn der Code nicht gefunden wird, entfernen Sie den Platz und suchen Sie erneut.
  3. Immer noch nicht drucken ‚keine Übereinstimmung gefunden‘ found-

Unterhalb der Code für die gleichgeschlechtlichen

ist
country_name = {} 
with open('U:\countrynames.csv','r') as f: 
    for line in f: 
     linesplit = line.split() 
     country_name[int(linesplit[0])] = linesplit[1] 

with open('U:\countrycodesCDR.csv','r') as f: 
    for line in f: 
     country_code = int(line.strip()) 
     while country_code != 0: 
      if country_code in country_name: 
       print country_name[country_code] 
       break 
      else: 
       country_code /=10 

     else: 
      print 'No match found' 
Verwandte Themen