如果只给出一个参数,则不同的 argparse 规则

Posted

技术标签:

【中文标题】如果只给出一个参数,则不同的 argparse 规则【英文标题】:Different argparse rules if only one argument is given 【发布时间】:2020-11-17 23:08:14 【问题描述】:

我在 argparse 参数中使用nargs='+',并且如果只有一个参数而不是多个参数,则需要不同的处理。我使用.csv 文件作为输入;如果只有一个,我可以将其用作其余代码的输入,但是如果有多个,我首先需要将它们合并为一个 .csv

我当前的代码是:

parser.add_argument('-csv', nargs='+', help=".csv file(s)")

而且我需要能够说

if only one .csv file:
    then
else (if multiple .csv files):
    merge the .csvs

【问题讨论】:

只是为了澄清问题,我不需要答案中给出的thenmerge the .csvs,它们只是占位符。谢谢 您正在将参数收集到一个列表中,对吗?你不能只检查列表的长度吗? 当你说合并 - 你的意思是把所有的文件都当作一个连续的流?例如,CSV 文件是否都有标题/没有?似乎取决于您想要做什么,然后您可以依次循环遍历 csv 文件名并执行您需要的任何操作。 Special cases aren't special enough - 您的合并算法究竟是如何工作的,它可以处理两个或多个输入,但不能处理一个? 在回答 Jon 时,我没有考虑过使用连续流,所以如果我能做到这一点,我必须研究一下。作为对 Karl 的回答,合并算法需要至少有两个输入,因为第一个文件保存了标题,随后它使用 __next__() 跳过标题 【参考方案1】:

nargs='+'返回一个列表,你可以检查列表的长度是否等于1。从例子中我可以看到你想检查你是否有只有一个 csv文件。

parser.add_argument('-csv', nargs='+', help=".csv file(s)")
args = parser.parse_args()
if len(args.csv) == 1:
   # one files
else:
   # many files

【讨论】:

以上是关于如果只给出一个参数,则不同的 argparse 规则的主要内容,如果未能解决你的问题,请参考以下文章

argparse - 请求已经给出的参数

argparse 仅在位置参数之前解析

Argparse:检查是不是传递了任何参数

如何在单元测试期间测试所需的 argparse 参数?

需要简单的 argparse 示例:1 个参数,3 个结果

打印所有 argparse 参数,包括默认值