使用argparse选项指定类型和模式

时间:2012-05-16 00:31:19

标签: python argparse

我有几个不同的输入文件,用案例编号“.1”,“。2”等保存以区分它们。我正在构建一个操作这些文件的脚本,我想使用argparse来允许用户指定要操作的特定案例编号,或者使用“_”来指定最后保存的案例(即输入文件与最大的病例数)。喜欢的东西;

> ls 
   file.1, file.2, file.3
> my_script.py 2
   (operates on file.2)
> my_script.py _
   (operate on file.3)

有没有办法可以指定“任何整数”作为一个选择而“_”作为第二选择?喜欢的东西;

parser = argparse.ArgumentParser()
parser.add_argument('case', choices=[anyint, '_'])

1 个答案:

答案 0 :(得分:5)

您可以使用add_argument(...)参数代替import os import argparse def intOrUnderscore(s): if s != '_': return int(s) cases = (n for n in os.listdir(".") if n.startswith("file.")) return max(int(c[c.rindex(".")+1:]) for c in cases) parser = argparse.ArgumentParser() parser.add_argument('case', type=intOrUnderscore) args = parser.parse_args() print args.case 。例如:

$ ls
file.1  file.2  file.3  s.py
$ python s.py 2
2
$ python s.py _
3

当我跑步时,我得到:

import os
import argparse

cases = [n[n.rindex(".")+1:] for n in os.listdir(".") if n.startswith("file.")]
cases.append("_")
parser = argparse.ArgumentParser()
parser.add_argument('case', choices = cases)

args = parser.parse_args()
print args.case

或者,您可以在代码中构建选项列表:

{{1}}