如果只给出一个参数,则不同的 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
【问题讨论】:
只是为了澄清问题,我不需要答案中给出的then
或merge 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 规则的主要内容,如果未能解决你的问题,请参考以下文章