【问题标题】:clarification with argparse in python 3.2 please请在 python 3.2 中使用 argparse 进行澄清
【发布时间】:2023-03-08 17:10:02
【问题描述】:

你好,我是 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 语句?

谢谢大家

【问题讨论】:

    标签: python-3.x argparse


    【解决方案1】:

    你所有的 if 语句总是正确的。

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

    意思

    if "-c:caps":
    

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

    你可能是说

    if args.c == 'caps':
    

    不,通常没有比一长串 elif 更好的方法了。还有其他方法,但这是最容易编写和理解的方法,因此也是最好的。

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

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

    然后像这样使用它:

    charset = CHAR_OPTIONS[args.c]
    

    【讨论】:

    • 谢谢,这是有道理的,但是现在它返回一个未定义的全局名称 args,但是如果它在 def 选项中使用它的方式使其成为局部变量?
    • @learn_What:不,它不会返回“现在”。您的示例也这样做了,我假设您只是在复制时出错了。您的示例忘记实际调用 parser.parse()。您需要做的是停止编写大量不起作用的代码,然后尝试使其工作。相反,一次只写一点代码,让那一点代码工作,然后扩展它。所以在这一点上,你应该重新开始,一次写一两三行代码,并确保这些行有效,然后一点一点地添加更多行。然后问你有问题的问题。
    【解决方案2】:

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

    【讨论】:

    • 这根本不是问题的重点……c 参数定义了一个字符列表。有些选项是小写或大写
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多