file作为可选参数

时间:2014-07-27 02:35:48

标签: python argparse optional-parameters

我是python中的新手,我正在开发一个处理文件的脚本来进行一些计算。命令行中的脚本(preprocess.py)就像这样调用:

python preprocess.py if.txt of.txt 13 13 41 41 52 24 

if.txt是输入文件,of.txt是输出文件,(13 13 41 41 52 24)只是组和子组数据的大小。

在脚本的一部分中,使用两个变量(mean = 0和std = 1)进行计算。

我必须修改脚本,以便脚本接受一个可选参数,一个包含2个值(mean和std)的文件,这样,如果像上面那样调用脚本,则使用mean = 0进行计算和std = 1,但如果脚本被调用如下:

python preprocess.py if.txt of.txt 13 13 41 41 52 24 xxxx.txt 

脚本获取xxxx.txt文件中的两个值,并将每个值保存在其各自的变量(mean和std)中。

现在,脚本使用sys.argv[]命令获取参数。我一直在寻找解决这个问题的方法,并发现argparse模块可以解决它,但我无法理解如何从文件中获取值并按预期​​保存它们。

  1. 如何使用argparse模块使xxxx.txt文件成为可选参数,以及如何在两个变量(mean和std)中保存该文件中的两个值?

  2. 如果我使用argparse模块,应该使用argparse来获取所有其他参数?如果是的话,该怎么做?

  3. PD:我正在学习英语,所以如果我犯了错误,请纠正我。

2 个答案:

答案 0 :(得分:0)

如果修改了int值的数量,那么此脚本将起作用

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file1')
parser.add_argument('file2')
parser.add_argument('vars', type=int, nargs=3)
parser.add_argument('file3',nargs='?')
print(parser.parse_args())

'?'意味着最后一个参数是可选的。

可以使用

获取可变数量的整数
parser.add_argument('vars', type=int, nargs='+')

然而,2变量的叙述不能一起工作。 ' +'会得到所有的东西,没有留下任何东西用于'。'。

我建议将该可选文件设为' optional / flagged'论点。这就是通常如何处理可选的问题,并在处理位置时克服这种模糊性。

parser.add_argument('--file3')

python preprocess.py if.txt of.txt 13 13 41 41 52 24 --file3 xxxx.txt

argparse方法是检查上一个sys.argv值。如果它看起来不像int,那么假设它是文件名,并继续像以前一样解析其余部分。

答案 1 :(得分:0)

另一种方法是通过使用named parameter为参数设置默认值。

def method(one, two, three=3):
  print(one)
  print(two)
  if three != 3:  # don't have to use it like this but it is a default value
    print(three)

如果未填充参数,则设置默认值;如果已填充,它将覆盖默认值并使用该默认值。

method(11, 22)  # prints first two parameters
method(23, 54, 89)  # prints all three

不确定这是否是您要寻找的东西,但这是另一种方式。