Вот программа для него.
import xlrd
def open_file(path, search_string):
wb = xlrd.open_workbook(path)
sheet = wb.sheet_by_index(0)
search_string_list = search_string.split()
results = [] # holding row_num and keyword match frequency
for row_num in range(sheet.nrows):
row_value = sheet.row_values(row_num)
keyword_match = 0
for keyword in search_string_list:
if keyword.lower() in row_value[1].lower():
# increasing keyword match frequency if it matches with a record
keyword_match += 1
# appending a list containing row_num and no of keywords matched to our
# list if atleast one keyword is matched
if keyword_match:
results.append([row_num, keyword_match])
# sorting our results list in descending order of keyword match count
results.sort(key = lambda results: results[1], reverse=True)
# printing rows of our "DATAFIX_LIST.xlsx" file on basis of first index
# (row num) of all the rows stored
for result in results:
print(sheet.row_values(result[0]))
path = "DATAFIX_LIST.xlsx"
search_string = input('Enter Search String --> ')
open_file(path, search_string)
Содержимое файла:
Вывод:
Enter Search String --> rollback batch TEMP
['DF9', 'TEMP BATCH ROLLBACK']
['DF1', 'BATCH ROLLBACK']
['DF2', 'TIAFLEX BATCH ROLLBACK']
['DF10', 'STAMPS BATCH ROLLBACK']
['DF3', 'TRANSACTION ROLLBACK']
Здесь мы составили список входной строки, разделив ее, а затем проверив, существует ли она во всех записях файла DATAFIX_LIST.xlsx одна за другой.
Если какое-либо из ключевых слов соответствует записи,мы увеличили переменную keyword_match на 1 и продолжили этот процесс для всех ключевых слов.
После проверки всех ключевых слов в строке мы добавили список, содержащий row_num и количество ключевых слов, сопоставленных со списком результатов. Затем мы отсортировали результаты в порядке убывания на основе количества совпавших ключевых слов.
Кроме того, мы преобразовали наши строки в нижний регистр, чтобы избежать проблем, связанных со регистром строк.
РЕДАКТИРОВАТЬ: согласно запросуиз @ vasudha-dixit (пользователь: 6087065), наиболее похожие строки теперь отображаются первыми.