python - 如何使用 argparse 让用户更改现有程序的输出?

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

我有一个程序可以生成一组数据并非常漂亮地打印出来。我寻求解决方案的挑战如下:

  • 在打印之前将数组中的数据弄乱,例如,插入 非 UTF-8 字符,字段顺序错误, 更改日期格式。
  • 让用户选择发生哪些“困惑”。

这是我现有程序的精简版本,我希望截取并破坏其输出:

ex_matrix = [[402, 'Mayonnaise', '0123', 2014-12-18, '(Burlington, -, -)', 1.0],
             [413, 'Peanuts', '0177', 2014-11-10, '(Place, Florida, South Afrika)', 1.0],
             [415, 'Seaweed', '0713', 2014-12-02, '(The Pub, -, Newfoundland)', 1.0]]

def print_forecasts(matrix, num_rows):
    for r in xrange(num_rows):
        print("{%s, [%s, %s, %s, %s], %s}" % (matrix[r][0], matrix[r][1],
              matrix[r][2], matrix[r][3], matrix[r][4], matrix[r][5]))
        print "# Generated using pickles_program.py \n"

def main():
    print_forecasts(ex_matrix, 3)

main()

根据我读到的 Python 的 argparse tutorial , PEP re. argparse ,以及几个 StackOverflow 的答案,看来 argparse 是这个问题的关键。这是我写的,只是想了解 argparse 的工作原理:

import argparse

num_rows = 3

parser = argparse.ArgumentParser(description="base rate model: error adder")

parser.add_argument("muck2", help="muck up the population field", nargs='?')
args = parser.parse_args()
for i in xrange(num_rows):
    matrix[i][1] = "^&*#$)(*DJJJJ)"
    print matrix

将有 10 种以上的 muck-up 供用户选择。我想我希望用户能够对命令行说“python pickles_program.py 1 3 8 11”或类似的东西,然后得到 muck-up 的 1、3、8 和发生了 11 次,并为“python pickles_program.py --help”显示所有混搭选项。

如果这是一个愚蠢的问题,希望您能原谅我。我是 Python 新手,仍在学习如何使用许多资源来学习这门伟大的语言,但我搜索了 SO 和 Python 文档的高低——请相信我,如果我的问题有答案在那里,它要么对像我这样的人解释得不够好,要么太难找到了,因为我还没有找到它。

请指教,特别是。关于如何更好/更清楚地提出我的问题!

最佳答案

在我看来,将您的“困惑”作为标志而不是数字来处理会容易得多。然后,您可以使用 ArgParse 检查是否启用了这些标志。例如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
   print "verbosity turned on"

通过这种方式,通过 parser.add_argument("argument", action="store_true") 添加所有“困惑”,然后在一系列 if 语句下为每个“困惑”执行逻辑。

关于python - 如何使用 argparse 让用户更改现有程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31503985/

相关文章:

python - 如何在向图中添加更多对象的同时保持 matplotlib 图形的纵横比?

Python 井字游戏错误 : TypeError: 'function' object is not subscriptable

linux - 如何在特定目录名称中查找文件?

Javascript 函数导致 HTML 页面重新加载 : why?

amazon-web-services - 清除 EB 初始化配置

python - Django 查询格式化日期时间输出

Python 多处理 apply_async 仅使用一个进程

c - 当我将指针传递给函数时出现段错误

python - 为什么不打印空的numpy数组

c - C 中所有固定长度的二进制排列