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)

「任意の整数」を 1 つの選択肢として指定し、「_」を 2 つ目の選択肢として指定する方法はありますか? 何かのようなもの;

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

1 に答える 1

5

代わりにtype引数 to を使用できます。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 に答える