Python模糊匹配两个文本文件

时间:2013-06-05 09:35:27

标签: python fuzzy-search

我有一些简单的代码与两个文本文件中的网络用户名相匹配。我已经尝试通过将两个输入都更改为大写来规范化输入,但是我需要更进一步,让我的代码生成用户名的部分匹配。我可能在一个列表中有SMITH,JOHN,也许还有SMITH,JOHN(FINANCE)在另一个列表中。我看过FuzzyWuzzy,但我只学习了几个星期的Python,而且我很难理解如何在我的脚本中使用它。

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:

这是我到目前为止所做的,可能不是很好的编码,但似乎有效。有关如何获得我的用户名的模糊匹配的任何想法,请? 非常感谢您提供的任何帮助。

编辑。

通常,我的列表将如下所示。显然有数百名用户。

File1中

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

文件2

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

1 个答案:

答案 0 :(得分: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')])