Как найти набор входных строк в файле Excel и вернуть все совпадающие строки, используя Python? - PullRequest
2 голосов
/ 09 ноября 2019

Я беру набор строк в качестве входных данных, например, «пакет отката», и ищу в файле Excel, который имеет структуру, как показано ниже

enter image description here

Я хочу вернуть все строки, которые были сопоставлены с любой подстрокой из входных данных, но в выходных данных я получаю все строки

Вот что я пробовал:

import xlrd

def open_file(path, search_string):
    wb = xlrd.open_workbook(path)
    sheet = wb.sheet_by_index(0)


    for row_num in range(sheet.nrows):
        row_value = sheet.row_values(row_num)
        if any(x in search_string for x in row_value[1]):
            print (row_value)


path = "DATAFIX_LIST.xlsx"
search_string = input('Enter Search String -->')
search_string_list = search_string.split()
open_file(path, search_string)

Выход: -

enter image description here

Ожидаемый результат:

['DF1', 'BATCH ROLLBACK']

['DF2', 'TIAFLEX BATCH ROLLBACK']

['DF3', 'TRANSACTION ROLLBACK']

1 Ответ

3 голосов
/ 09 ноября 2019

Вот программа для него.

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)

Содержимое файла:

Contents of

Вывод:

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), наиболее похожие строки теперь отображаются первыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...