optparse и строки - PullRequest
       10

optparse и строки

2 голосов
/ 12 октября 2011

Пытаюсь научиться использовать outparse. Так что вот ситуация, я думаю, что я правильно настроил свои настройки, просто то, как настроить мои параметры, немного сбивает меня с толку. По сути, я просто хочу проверить свое имя файла, чтобы увидеть, есть ли конкретные строки.

Например:

    python script.py -f filename.txt -a hello simple

Я хочу вернуть что-то вроде ...

    Reading filename.txt....
    The word, Hello, was found at: Line 10
    The word, simple, was found at: Line 15

Вот то, что у меня есть, я просто не знаю, как правильно его настроить. Извините, что задаю глупые вопросы: P. Заранее спасибо.

Вот код на данный момент:

    from optparse import OptionParser

    def main():

        usage = "useage: %prog [options] arg1 arg2"
        parser = OptionParser(usage)

        parser.add_option_group("-a", "--all", action="store", type="string", dest="search_and", help="find ALL lines in the file for the word1 AND word2")

        (options, args) = parser.parse_args()

        if len(args) != 1:
            parser.error("not enough number of arguments")

            #Not sure how to set the options...


    if __name__ == "__main__":
        main()

1 Ответ

2 голосов
/ 12 октября 2011

Вы должны использовать OptionParser.add_option() ... add_option_group() не делает то, что вы думаете, это делает ... это полный пример в духе того, что вы ищете ... обратите внимание, что --all полагается при разделении запятыми значений ... это облегчает задачу, вместо использования пробела (для этого потребуется заключить в кавычки значения параметров для --all.

Также обратите внимание, что вы должны явно проверять options.search_and и options.filename вместо проверки длины args

from optparse import OptionParser

def main():
    usage = "useage: %prog [options]"
    parser = OptionParser(usage)
    parser.add_option("-a", "--all", type="string", dest="search_and", help="find ALL lines in the file for the word1 AND word2")
    parser.add_option("-f", "--file", type="string", dest="filename", help="Name of file")
    (options, args) = parser.parse_args()

    if (options.search_and is None) or (options.filename is None):
        parser.error("not enough number of arguments")

    words = options.search_and.split(',')
    lines = open(options.filename).readlines()
    for idx, line in enumerate(lines):
        for word in words:
            if word.lower() in line.lower():
                print "The word, %s, was found at: Line %s" % (word, idx + 1)

if __name__ == "__main__":
    main()

Используя тот же пример, вызовите скрипт с ... python script.py -f filename.txt -a hello,simple

...