如何根据python中给出的命令行输入运行某些函数 [英] How to run certain function based on command line input given in python

查看:22
本文介绍了如何根据python中给出的命令行输入运行某些函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我的主脚本,我在其中定义了两个函数.or_search 将查找指定字符串的出现次数,并将其在其中找到的索引位置添加到列表中.

I have my main script where i have two functions defined. The or_search will find occurrences of a string specified and add to the list what index position it has been found within.

第二个函数 and_search 查找指定字符串的出现次数,并使用计数器增加已找到的次数.在我的 main 函数中,如果我通过例如 python main.py 和search Commission , item , sell ,它应该运行 and_search 函数并带回结果.它也应该用 orsearch 做到这一点.在命令行上运行时,它似乎在终端上没有打印任何内容.我不确定我做错了什么.我的脚本如下:

The second function and_search finds occurrences of a string specified and a counter is used to increment the amount of times it has been found. In my main function , if i pass for example python main.py andsearch commission , item , sold , it should run the and_search function and bring back the results. It should do this with orsearch as well. When running on the command line , it seems to print back nothing on the terminal. I am not sure what it is that i am doing wrong. My script is as follows :

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())

推荐答案

您总共调用了 get_config 5 次,但您只需要调用一次.只需将结果传递给您调用的函数即可.也许是这样的:

You are calling get_config a total of five times, but you only need to call it once. Just pass on the result to the functions you call. Perhaps like this:

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)

可能应该重构更多代码以避免重复.如果您发现了一个错误,您不希望必须记住在代码中的两个或多个地方修复它.另请参阅DRY 原则.

Probably a lot more of your code should be refactored to avoid repetitions. If you find a bug, you don't want to have to remember to fix it in two or more places in your code. See also DRY Principle.

这篇关于如何根据python中给出的命令行输入运行某些函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆