我是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
模块可以解决它,但我无法理解如何从文件中获取值并按预期保存它们。
如何使用argparse模块使xxxx.txt文件成为可选参数,以及如何在两个变量(mean和std)中保存该文件中的两个值?
如果我使用argparse模块,应该使用argparse来获取所有其他参数?如果是的话,该怎么做?
答案 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
不确定这是否是您要寻找的东西,但这是另一种方式。