【问题标题】:Python argparse arguments with repeatable parameter pairs具有可重复参数对的 Python argparse 参数
【发布时间】:2017-06-05 14:26:07
【问题描述】:

我正在开发一个 Python 脚本,该脚本将利用 CLI 参数将 .xls/.xlsx 文件转换为 .csv。由于 .xsl/.xlsx 文件可以有多个工作表,因此每个工作表都需要单独转换为单独的 .csv 文件。我想做的是使用 argparse 添加一个必需参数来指定要转换的工作表和一个可选参数来指定生成的 .csv 应该命名的内容。这是我希望命令看起来如何的示例:

python converter.py --sheets <sheet-name> [sheet-rename]

所以我不确定如何使用 argparse 添加带有两个参数的参数。

此外,我想为这个参数添加更多功能。如果可能的话,我希望可以重复参数以允许转换更多工作表。我不确定命令语法的外观,但类似这样:

python converter.py --sheets (<sheet-name> [sheet-rename])...
python converter.py --sheets sheet1 sheet1_rename sheet2 sheet2_rename

这可能最终过于复杂,但任何输入都会很棒。

【问题讨论】:

    标签: python command-line-interface command-line-arguments argparse


    【解决方案1】:

    --sheet 可以定义为一个带有两个参数的选项,这两个参数都在一个列表中累积。

    p.add_argument('--sheet', action='append', nargs=2)
    

    调用python converter.py --sheet old1 new1 --sheet old2 new2 会产生一个列表列表:

    >>> print p.parse_args("--sheet old1 new1 --sheet old2 new2".split())
    Namespace(sheet=[['old1', 'new1'], ['old2', 'new2']])
    

    【讨论】:

    • 太棒了!我没有意识到您可以多次调用可选参数来使用 action='append' 创建一个列表。我要更改的一件事是设置 nargs='+' 因为我想提供重命名作为选项,如果未指定,则 .csv 将以与工作表相同的名称保存。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 2018-06-27
    • 2019-07-12
    • 2020-03-16
    • 1970-01-01
    • 2015-07-20
    • 2017-11-28
    • 2019-11-17
    相关资源
    最近更新 更多