我有几个不同的输入文件,用案例编号".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)
Run Code Online (Sandbox Code Playgroud)
有没有办法可以指定"任何整数"作为一个选择而"_"作为第二选择?就像是;
parser = argparse.ArgumentParser()
parser.add_argument('case', choices=[anyint, '_'])
Run Code Online (Sandbox Code Playgroud)
您可以使用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
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:
$ ls
file.1 file.2 file.3 s.py
$ python s.py 2
2
$ python s.py _
3
Run Code Online (Sandbox Code Playgroud)
或者,您可以在代码中构建选择列表:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |