0

我有几个不同的输入文件,用案例编号“.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, '_'])
4

1 回答 1

5

您可以使用该type参数来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
于 2012-05-16T01:07:41.587 回答