我试图为自己创建一个小的数据框架或条目列表。我希望能够搜索这个数据库的具体条目。代码以我想要的方式工作,即使它可能不是最优雅的方式来编写它-我仍然是python的新手,我刚刚发现了csv模块前几天-。我可以输入一个短语,它会给出相应的单词和百分比值。 该文件是CSV文件的形式,我希望按百分比值对输出进行排序。因此,最相关的匹配应该在顶部,最不相关的应该在底部。我使用fuzzylogic来计算两个字符串之间的相似性,但是我使用了difflib。 最终结果是按字母顺序排列的,而不是按数字顺序,这是我的目标。我有试着用熊猫,但是我得到一大堆的错误,可能是我的错,因为我不知道如何使用它,但我想坚持“纯”python,可以说,目前因为我想更好地挂了。 总结一下我的整个问题:你对数字排序结果的解决方案是什么? 我将非常感谢你的帮助,感谢你花时间阅读这篇长文。
try:
import csv,os,difflib,easygui,pickle,sys
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import operator
except ModuleNotFoundError:
print ("You do not have the required modules installed.The progam will now close.")
raise SystemExit
Suche = "Kunde"
Wahrscheinlichkeit = 60
Eintrag=[]
def aehnlichkeit(a, b)
ergebnis = fuzz.token_sort_ratio(a,b)
return round (ergebnis,2)
with open('Platzhalter_Message_Keys.csv', 'rt') as csvfile:
Column=[]
reader = csv.reader(csvfile, delimiter=';')
for row in reader:
column=row[0],row[1],row[2]
Column.append(column)
eintrag=aehnlichkeit(Suche,row[1])
Eintrag.append(eintrag)
for Column,Eintrag in zip (Column,Eintrag):
if Eintrag >=Wahrscheinlichkeit:
print([Eintrag,Column])
代码输出
[60, (' Index', 'Index', 'Index')]
[60, (' Keine', 'Keine', 'none')]
[100, (' Kunde', 'Kunde', 'Customer')]
[67, (' Kundenname', 'Kundenname', 'CustomerName')]
[77, (' Kundennr', 'Kundennr', 'CustomerNo')]
[62, (' KurzName', 'KurzName', 'ShortName')]
[62, (' Reklamation.Kunde_Email', 'Kunde_Email', 'Customer_email')]
[62, (' Reklamation.Kunde_L_Fax', 'Kunde_L_Fax', 'Customer_S_Fax')]
[62, (' Reklamation.Kunde_L_Ort', 'Kunde_L_Ort', 'Customer_S_City')]
[62, (' Reklamation.Kunde_L_PLZ', 'Kunde_L_PLZ', 'Customer_S_ZIPCode')]
[62, (' Reklamation.Kunde_R_Fax', 'Kunde_R_Fax', 'Customer_I_Fax')]
[62, (' Reklamation.Kunde_R_Ort', 'Kunde_R_Ort', 'Customer_I_City')]
[62, (' Reklamation.Kunde_R_PLZ', 'Kunde_R_PLZ', 'Customer_I_POBox')]
问题来源StackOverflow 地址:/questions/59380298/sorting-search-results-of-a-csv-file-according-to-the-fuzzy-logic-result
如果想要对结果排序,就必须创建一个排序后的列表,这将需要额外的内存来存储—您的代码只是遍历两个列表中动态生成的对序列。 这很容易通过内置的sort()函数和operator.itemgetter()来实现,从而创建一个键函数作为对项进行排序的值——如下所示。 我还修复了一些我注意到的其他小问题。
import csv
from operator import itemgetter
HI_TO_LO = False # Order of sorted results.
Eintrag = [60, 60, 100, 67, 77, 62, 62, 62, 62, 62, 62, 62, 62]
Wahrscheinlichkeit = 60
with open('Platzhalter_Message_Keys.csv', 'rt', newline='') as csvfile:
Column=[]
reader = csv.reader(csvfile, delimiter=';', skipinitialspace=True)
for row in reader:
column = row[0], row[1], row[2]
Column.append(column)
# Using hardcoded values for example.
#eintrag = aehnlichkeit(Suche, row[1])
#Eintrag.append(eintrag)
sorted_results = sorted(zip(Column, Eintrag), key=itemgetter(1), reverse=HI_TO_LO)
for Column, Eintrag in sorted_results:
if Eintrag >= Wahrscheinlichkeit:
print([Eintrag, Column])
输出:
[60, ('Index', 'Index', 'Index')]
[60, ('Keine', 'Keine', 'none')]
[62, ('KurzName', 'KurzName', 'ShortName')]
[62, ('Reklamation.Kunde_Email', 'Kunde_Email', 'Customer_email')]
[62, ('Reklamation.Kunde_L_Fax', 'Kunde_L_Fax', 'Customer_S_Fax')]
[62, ('Reklamation.Kunde_L_Ort', 'Kunde_L_Ort', 'Customer_S_City')]
[62, ('Reklamation.Kunde_L_PLZ', 'Kunde_L_PLZ', 'Customer_S_ZIPCode')]
[62, ('Reklamation.Kunde_R_Fax', 'Kunde_R_Fax', 'Customer_I_Fax')]
[62, ('Reklamation.Kunde_R_Ort', 'Kunde_R_Ort', 'Customer_I_City')]
[62, ('Reklamation.Kunde_R_PLZ', 'Kunde_R_PLZ', 'Customer_I_POBox))')]
[67, ('Kundenname', 'Kundenname', 'CustomerName')]
[77, ('Kundennr', 'Kundennr', 'CustomerNo')]
[100, ('Kunde', 'Kunde', 'Customer')]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。