请在python 3.2中使用argparse进行澄清

时间:2012-03-23 20:59:37

标签: python-3.x argparse

你好我是python的新手并且已经阅读了文档并且遇到了argparse的问题

这里是我正在尝试的代码,请简单解释一个简单的头脑的人 提前谢谢

#!/usr/bin/env python
import argparse
from string import ascii_lowercase
from string import ascii_uppercase
from string import digits
from string import punctuation

def options():
    parser = argparse.ArgumentParser(description="Create a list of characters")
    parser.add_argument('-c:')
    if (args.c):# == "-c:":
        if "-c" + ":" + "caps":
            charset = ascii_uppercase
        elif "-c:" + "small":
            charset = ascii_lowercase
        elif "-c:" + "digits":
            charset = digits
        elif "-c:" + "punc":
            charset = punctuation + " "
        elif "-c:" + "space":
            charset = " "
        elif "-c:" + "all":
            charset = ascii_lowercase + ascii_uppercase + digits + punctuation + space
        else:
            print("when using -c you must include an option! (caps, small, digits, punc, space, all)")

def filename():
    filename = open('C:\\Users\\MSec\\Desktop\\WordLists\\'+sys.argv[1], 'w')
    return 

if __name__ == "__main__":
    filename()
    options()

再一次,我不太了解文档

我想虽然我有更好的(或更多pythonic)方式来编码所有选项而不是许多elif语句?

谢谢大家

2 个答案:

答案 0 :(得分:0)

所有if语句都是真的。

if "-c" + ":" + "caps":

意味着

if "-c:caps":

字符串“-c:caps”是非假的。其余类似的if语句也是如此。

你可能意味着

if args.c == 'caps':

不,往往没有更好的方式,一长串的精灵。还有其他方法,但这是最容易编写和理解的,因此也是最好的。

但是,在这种情况下,您可以制作字典:

CHAR_OPTIONS = {'caps': ascii_uppercase,
                'small': ascii_lowercase,
                etc....
               }

并像这样使用它:

charset = CHAR_OPTIONS[args.c]

答案 1 :(得分:0)

我不确定这是否是您要查找的内容,但您始终可以使用 .upper() 将字符串大写,将小写字符串使用 .lower()。 :)