我有一些简单的代码与两个文本文件中的网络用户名相匹配。我已经尝试通过将两个输入都更改为大写来规范化输入,但是我需要更进一步,让我的代码生成用户名的部分匹配。我可能在一个列表中有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)
答案 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')])