2013-06-05 2 views
1

У меня есть простой бит кода, который соответствует сетевым именам пользователей, найденным в двух текстовых файлах. Я попытался нормализовать ввод, изменив оба входа на верхний регистр, но мне нужно сделать еще один этап и получить код для создания частичных совпадений имен пользователей. У меня может быть SMITH, JOHN в одном списке и, возможно, SMITH, JOHN (FINANCE) в другом списке. Я посмотрел на FuzzyWuzzy, но я изучал Python уже пару недель, и я изо всех сил пытаюсь понять, как использовать его в моем скрипте.Python Fuzzy Matches в двух текстовых файлах

with OpenUpperCase(filename, "r")as file1: 
    for line in islice(file1,20,None): 
     with OpenUpperCase ("c:\\Files\Usernames.txt", "r") as file2: 
      files= filename.upper().split("\\") 
      int1=files[3].strip() 
      filedate=int1[0:-4] 
      list2 = file2.readlines() 
      for i in file1: 
       for j in list2: 
        if i == j: 

Это то, что у меня до сих пор, но не очень хорошее кодирование, возможно, но оно работает. Любые мысли о том, как я могу получить нечеткое соответствие моих имен пользователей, пожалуйста? Большое спасибо за любую помощь, которую вы могли бы предоставить.

EDIT.

Как правило, мои списки будут выглядеть так. Очевидно, с сотнями пользователей.

File1

Salt, William (old user) 
Wilds, Tony 
Smith, William (Old User) 
JONES,Steven (Old User) 

File2

Salt, Bill 
Wilds, Tony (SALES) 
Smith,Will (OLD USER) 
JONES,STEVEN (ACCOUNTS) 
+0

Не могли бы вы дать образец списков? – zhangyangyu

+0

@zhangyangyu списки прилагаются, чтобы дать вам идею. – user2377057

+0

благодарит @Mike Müller за редактирование в более читаемом формате. – user2377057

ответ

1

Использование stringIO объектов для простоты:

file1 = io.StringIO("""Salt, William (old user) 
Wilds, Tony 
Smith, William (Old User) 
JONES,Steven (Old User)""") 

file2 = io.StringIO("""Salt, Bill 
Wilds, Tony (SALES) 
Smith,Will (OLD USER) 
JONES,STEVEN (ACCOUNTS)""") 

Читать все имена в наборе:

def read_file(fobj): 
    names = set() 
    for line in fobj: 
     split_line = line.lower().split(',') 
     names.add((split_line[0], split_line[1].split()[0])) 
    return names 

Для каждого файла:

data1 = read_file(file1) 
data2 = read_file(file2) 

Простое пересечение будет делать:

data1.intersection(data2) 

Результат:

set([('wilds', 'tony'), ('jones', 'steven')]) 
+0

Это большая помощь. Спасибо @Mike Müller – user2377057

 Смежные вопросы

  • Нет связанных вопросов^_^