Как запустить определенную функцию на основе ввода в командной строке, заданного в python - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть основной сценарий, в котором определены две функции.Or_search найдет вхождения указанной строки и добавит в список позицию индекса, в которой он был найден.

Вторая функция and_search находит вхождения указанной строки, а счетчик используется для увеличения количества разэто было найдено.В моей основной функции, если я передам, например, python main.py и поиск комиссии, item, sold, он должен запустить функцию and_search и вернуть результаты.Это должно быть сделано с orsearch также.При запуске в командной строке, кажется, ничего не печатать на терминале.Я не уверен, что я делаю неправильно.Мой сценарий выглядит следующим образом:

import argparse


def get_config():
    parser = argparse.ArgumentParser(description='Search your keyword ex: querycheck.py andsearch general,population,Alzheimer')
    parser.add_argument('searchtype', type=str, help='Search type orsearch and andsearch only ')
    parser.add_argument('Value', type=str, help='Parameter to search')
    args = parser.parse_args()
    return args.searchtype, args.Value

finallist = []
counter = 0


def or_search(get_config):
    search_type, value = get_config()

    if search_type == "orsearch":
        value_split = value.split(",")
        with open("hscic-news", "r") as file:
            file_content = file.readlines()
            for x in range(len(file_content)):
                for y in value_split:
                    if y in file_content[x]:
                        finallist.append(x)


        list_with_duplicates = list(set(finallist))
        final_list = list(set(finallist))
        result = final_list
        print(result)

    else:
            print ("Please enter only or/and for search type ")
            exit(1)


#

def and_search(get_config):
    search_type, value = get_config()
    if search_type == "andsearch" :
        value_split = value.split(",")
        with open("hscic-news", "r") as newsfile:
            ncontent = newsfile.readlines()
            for x in range(len(ncontent)):
                for y in value_split:
                    if y in ncontent[x]:
                        counter += 1
                    else:
                        counter = 0
                    if counter == len(value_split) :

                       finallist.append(x)

        final_list = list(set(finallist))
        result = final_list
        print(result)
    #
    #
    else:
            print ("Please enter only or/and for search type ")
            exit(1)



if __name__ == '__main__':

    search_type = get_config()
    if search_type == "orsearch":
        or_search(get_config())
    elif search_type == "andsearch":
        and_search(get_config())

1 Ответ

0 голосов
/ 17 февраля 2019

Вы звоните get_config всего пять раз, но вам нужно позвонить только один раз.Просто передайте результат функциям, которые вы вызываете.Возможно, вот так:

def or_search(value):
    value_split = value.split(",")
    # ...

def and_search(value):
    value_split = value.split(",")
    # ...

if __name__ == '__main__':
    search_type, value = get_config()
    if search_type == "orsearch":
        or_search(value)
    elif search_type == "andsearch":
        and_search(value)

Вероятно, нужно реорганизовать намного больше кода, чтобы избежать повторений.Если вы нашли ошибку, вам не нужно забывать исправлять ее в двух или более местах кода.См. Также Принцип СУХОГО.

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