Argparse,处理可重复的项目集

2023-12-02

是否可以创建一组相关且可重复的可选参数?

假设我有三个参数 -a、-b、-c 组成一个集合,-a 是必需的,但 -b 和 -c 是可选的。 (更新)

我希望能够指定多组这些。

Script.py -a 1 -b 2 -c 3    -a 4 -c 6   -a 7 -b 8    -a 10

这将被解析为字典列表,如下所示

[
    {"a":1, "b":2, "c":3},
    {"a":4, "c":6},
    {"a":7, "b":8},
    {"a":10}
]

使参数可重复的一种方法是使用“追加”操作类型:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action='append')
parser.add_argument('-b', action='append')
parser.add_argument('-c', action='append')
argv = '-a 1 -b 2 -c 3    -a 4 -c 6   -a 7 -b 8    -a 10'
args = parser.parse_args(argv.split())
print args

产生:

Namespace(a=['1', '4', '7', '10'], b=['2', '8'], c=['3', '6'])

不幸的是它确实丢失了一些信息。无法将“4”与“6”而不是“8”关联起来。

如果您使用“--”来分隔参数块,那么这个迭代解析器可能会完成这项工作:

parser = argparse.ArgumentParser()
# SUPPRESS keeps the default None out of the namespace
parser.add_argument('-a', type=int, default=argparse.SUPPRESS, required=True)
parser.add_argument('-b', type=int, default=argparse.SUPPRESS)
parser.add_argument('-c', type=int, default=argparse.SUPPRESS)
argv = '-a 1 -b 2 -c 3  --  -a 4 -c 6 --  -a 7 -b 8  --  -a 10'

arglist = []
rest = argv.split()
while rest:
    args,rest = parser.parse_known_args(rest)
    rest = rest[1:]  # remove the 1st '--'
    print args
    arglist.append(vars(args))
print arglist

生产:

Namespace(a=1, b=2, c=3)
Namespace(a=4, c=6)
Namespace(a=7, b=8)
Namespace(a=10)

[{'a': 1, 'c': 3, 'b': 2}, 
 {'a': 4, 'c': 6}, 
 {'a': 7, 'b': 8}, 
 {'a': 10}]

我不确定它是否足够强大。我做了-a必需的,因此从其中一组中省略它会引发错误。


或者调整farzad的迭代器:

def by_sets(iterator, start):
    set = []
    for val in iterator:
        if set and val == start:
            yield set
            set = [val]
        else:
            set.append(val)
    yield set

argv = '-a 1 -b 2 -c 3  -a 4 -c 6 -a 7 -b 8  -a 10'
# print list(by_sets(argv.split(), '-a'))
# [['-a', '1', '-b', '2', '-c', '3'], ['-a', '4', '-c', '6'],... ['-a', '10']]

arglist = []
for aset in by_sets(argv.split(), '-a'):
    arglist.append(vars(parser.parse_args(aset)))
print arglist

产生:

[{'a': 1, 'c': 3, 'b': 2}, {'a': 4, 'c': 6}, {'a': 7, 'b': 8}, {'a': 10}]

循环也可以写成推导式:

[vars(parser.parse_args(aset)) for aset in by_sets(argv.split(), '-a')]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Argparse,处理可重复的项目集 的相关文章

  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • Android 上的 Snackbar 无需更改主题

    当我在 Android 上创建小吃栏时 出现以下错误 java lang IllegalStateException 您需要在此活动中使用 Theme AppCompat 主题 或后代 我不想将活动的主题更改为 AppCompat 有没有办
  • 从相对路径中的文件加载 C# 中的图片框图像

    我在 Windows 窗体解决方案中有一个图片框图像 用户从数据库中选择一个项目后 我想将图像加载到此图片框中 图像的文件名将来自数据库 并且所有图像必须存储在应用程序文件夹 Images 的子文件夹中 我不想在我的解决方案中包含所有这些
  • Android:如何查找屏幕的宽度和高度?

    我试图找到屏幕的宽度和高度 但我尝试过的方法都不适用于我创建的类 我的代码如下 有谁知道如何找到它 我无法使用下面尝试的方式 因为 getWidth 已被弃用 public class Crate public int acrossCrat
  • 在 LINQ 查询中的模型值中使用列表

    我正处于 ASP NET MVC 开发的非常基础的阶段 因此 有时我很难使用简单的 LINQ 查询来工作 设想 我有一个页面有一些Image并由用户对该图像发表评论 就像 Facebook 上包含用户评论的帖子一样 因此 我从文本区域保存这
  • git merge squash - 当我想要的只是我压扁的分支的更改时冲突解决

    I have github当主分支达到某种可接受的状态时 我将其推送到 github 的分支 已经这样做过一次 为此我做了 MrD MRSD c Dropbox eclipse workspaces android AndroidMonit
  • 为 C++ 指针集定义运算符<

    我正在尝试编写 C STL 集 它保留指向我的自定义类的指针 但我不明白当我使用指针而不是类的对象时如何重载 我读到 如果我们重载 set 用于比较的 当您使用operator 函数创建一个结构并将其传递给集合时 我遇到了这个技巧 例如se
  • Tensorflowpartial_run()“在执行部分运行之前必须运行‘setup’!”尽管已被设立

    我正在使用tensorflow的partial run 方法围绕运行子图构建概念验证 而无需重新计算 目前我有一个简单的小 python 脚本 见下文 它应该将两个占位符值相乘并加 1 作为部分图运行 此操作有效一次 然后失败并出现错误 t
  • 如何分析 goroutine 的数量

    基本上我想知道我的程序是否随着时间的推移而泄漏 goroutine 所以 我想看看随着时间的推移有多少 goroutine 正在运行 有什么办法可以通过pprof 我已经搞定了go tool pprof http localhost 888
  • 如何在 docker 容器上设置 ulimit / 文件描述符 镜像标签为 phusion/baseimage-docker

    我需要在 docker 容器上正确设置文件描述符限制 我使用 ssh 连接到容器 https github com phusion baseimage docker 已经尝试过 编辑limits conf容器忽略这个文件 新贵程序位于htt
  • 如何在空手道框架中编辑配置的标头

    在我的框架中 我有 headers js 文件 我使用命令在每个功能文件的背景上调用该 js 文件 configure headers read headers js 这按预期工作 某些情况下我需要更改 client id 值 例如 hea
  • SSLHandshakeException:收到致命警报:Java 6 -> 8 升级后握手失败

    我们最近将一个项目从 Java 6 更新到了 Java 8 现在我们在 SSL 握手方面遇到了障碍 服务层使用客户端请求和接收来自第三方应用程序的调用 在服务层 密钥库初始化为 System setProperty javax net ss
  • 从数据库中写入和读取最新(按日期)的行

    我对下面的代码有三个问题 基本上我正在尝试以 currentdate count 格式写入行 继续将行日期附加到同一个 csv 文件中 读取最近的 5 个条目并打印它 目前我尝试了以下操作并遇到以下错误 1 如何以当前日期格式写入一行 计数
  • Android 上的 Proguard 与 OrmLite

    我应该如何在 Android 上将 proguard 与 ormlite 库一起使用 尝试这个 keep class com j256 keepclassmembers class com j256 keep enum com j256 k
  • 第 n 个子元素选择错误的元素

    对于这个特定的站点 当我通过 CSS 或 jQuery 使用 nth child 时 nth child 选择器捕获了错误的元素 我在调用的选择器之前有一个孩子 home article nth child 3 captures 2nd c
  • 评估 FeatherJS 身份验证需求

    我和我的同事想构建一个聊天应用程序 ReactJS NodeJS 我们一直在寻找最好的框架来实现这一点 FeathersJS 似乎无疑是最稳定且功能丰富的 socket io 包装器 然而 由于我们希望允许我们的应用程序扩展 因此我们决定将
  • 如何检测字符串列表中的公共子字符串

    给定一组字符串 例如 EFgreen EFgrey EntireS1 EntireS2 J27RedP1 J27GreenP1 J27RedP2 J27GreenP2 JournalP1Black JournalP1Blue Journal
  • 尝试改变返回 Iterator 的闭包内的状态时,出现 Rust 错误“无法推断借用表达式的适当生命周期”

    我正在尝试学习 Rust 并在尝试模拟嵌套 Python 生成器时遇到了与生命周期相关的问题 正如编译器所报告的 问题在于由闭包改变的值的生命周期 代码的关键是 flat mapping 一个闭包 它调用一个函数 该函数在其返回的迭代器中改
  • html5-canvas 在线移动对象

    我想在斜线上移动物体 我已经给出了我的代码 在我的第三个 div 的代码中 当我移动滑块时 我在这条线上画了一条斜线 我想移动一个对象 我在第一个分区中正在做类似的事情 我在曲线上移动物体的地方 我正在寻找一些函数 在其中我将提供点并且对象
  • 如何使用 .htaccess 允许在我的 iframe 中访问页面但不能直接访问?

    我有一个用 iframe 制作的网站 我想在自己的 iframe 中显示一个页面 但我想拒绝直接访问 我怎样才能在我的 htaccess 您可以使用Referer用于检查请求是否来自您网站上的链接 或 img src 或 iframe sr
  • Argparse,处理可重复的项目集

    是否可以创建一组相关且可重复的可选参数 假设我有三个参数 a b c 组成一个集合 a 是必需的 但 b 和 c 是可选的 更新 我希望能够指定多组这些 Script py a 1 b 2 c 3 a 4 c 6 a 7 b 8 a 10