【发布时间】:2017-03-31 18:41:11
【问题描述】:
以下是我想要实现的目标的简短摘要:
- 获取一个或多个(表格)文件
- 查找特定的字符串键(目前只有一个键,但我可以想象将其扩展为包含多个键)
- 与键匹配的行,提取给定位置或位置范围的字符。
因此,在理想情况下,我希望通过以下方式运行我的脚本,它们都是有效的用例:
python myscript.py file1 file2 file3 "key" 10
python myscript.py file1 file2 "key" 10 12
python myscript.py file1 "key" 10 12
python myscript.py file1 "key" 10
鉴于我尝试过的用例:
parser = argparse.ArgumentParser()
parser.add_argument("files", nargs='+', help="input files")
parser.add_argument("gene", help="gene of interest")
parser.add_argument("pos", nargs='+', type=int, help="position(s) to analyze")
""" Validate pos """
if len(args.pos) > 2:
sys.exit("Positions argument needs to be a single integer or two integers denoting a range!")
...
# in some other function
if len(args.pos) == 1:
key = row[SIND][args.pos[0]]
elif len(args.pos) == 2:
key = row[SIND][args.pos[0] : args.pos[1]]
else:
print(args.pos, len(args.pos))
sys.exit("args.pos assertion failed!")
它在只有一个整数时有效,但在我发送两个整数来分析范围时无效。在后一种情况下,“密钥”也被解释为文件,因此我得到FileNotFoundError: [Errno 2] No such file or directory: 'IGHV4-39'。
问题 1: 是否可以标记或指示位置参数,以便我可以告诉 argparse files 参数何时结束以及 gene 何时开始?我不想让它们成为可选参数,因为如果省略了三个参数中的任何一个,脚本的逻辑就是不完整的。
问题2: 将 pos 参数一分为二是否有帮助? pos 接受一个整数, range 接受两个整数,然后让它们以某种方式排他?
有什么想法吗?
【问题讨论】:
-
要么使用标记参数(是的,它们可能是必需的),要么你自己解析
sys.argv。您的逻辑似乎倾向于从最后解析该列表:例如拉出尾随整数,键字符串,其余是文件名。
标签: python python-3.x parameter-passing argparse