1

我有一段简单的代码可以匹配两个文本文件中的网络用户名。我试图通过将两个输入都更改为大写来规范化输入,但我需要更进一步,让我的代码生成用户名的部分匹配。我可能在一个列表中有 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:

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

编辑。

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

文件 1

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)
4

1 回答 1

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')])
于 2013-06-05T12:10:14.230 回答