【问题标题】:Different argparse rules if only one argument is given如果只给出一个参数,则不同的 argparse 规则
【发布时间】: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__() 跳过标题

标签: python python-3.x csv argparse


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 2020-03-15
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多