【发布时间】:2017-02-02 17:59:34
【问题描述】:
我正在从活动目录源查询用户并提取他们的姓名,我试图通过给定的输入提取最接近的匹配项:
from pyad import adquery
import difflib
data = []
q = adquery.ADQuery()
q.execute_query(
base_dn="some info"
)
data_given = raw_input("Enter user(last,first): ")
for row in q.get_results():
item = row["distinguishedName"]
user = ''.join(item.split(",")[0:2:])
new_user = user.replace("\\", ",").replace("CN=", "")
print new_user
if new_user == data_given:
data = [new_user]
else:
data = difflib.get_close_matches(data_given, new_user, n=10, cutoff=1.0)
if not data:
print "No user was found with the criteria given."
else:
print data
但是,我拉的用户最终会是这样的:
Kadiyala, Chndr
Doulas, Jh P.
Perkins, Thomas - OSM-OCO CTR
Lattsw, Tamka M - OAM OCO
而difflib 不会拉出最接近的匹配项。
例如,假设用户输入“Perkins, Thomas”:
Enter user(last,first): Perkins, Thomas
No user was found with the criteria given.
有没有办法让difflib 根据给定条件中匹配的字符数来提取匹配项?我搜索了文档,似乎找不到任何关于更改 difflib 的匹配条件的内容。
【问题讨论】:
-
possibilities应该是字符串列表,而您的new_user是单个字符串。另外,您不会将查询中的所有名称收集在一个列表中,然后然后对所有名称同时使用get_close_matches()吗?
标签: python string python-2.7 match