2016-05-24 15 views
0

2つのコマンドライン引数を取るプログラムを作成したいと思います。最初は解析のために開くファイルの名前で、2番目のフラグは-sです。ユーザーが間違った数の引数を提供するか、または他の引数が-sでなければ、 "Usage:[-s] file_name"というメッセージを出力し、exitを使用してプログラムを終了します。Pythonのコマンドライン引数Try/Except

次に、私のプログラムが読み込みのためにファイルを開こうとします。プログラムは、各行を読み込んだファイルをオープンし、浮動小数点数、整数、および整数や浮動小数点以外の文字列の数を返します。ただし、ファイルを開くと失敗すると、例外が発生し、「Unable to open [filename]」と表示され、exitを使用して終了する必要があります。

私はPythonのコマンドラインについてインターネット上でたくさんのものを探してきましたが、私はもっと混乱してしまいました。だからここまで私が研究してきたことからの試みです。

from optparse import OptionParser 

    def command_line(): 
     parser = OptionParser()   
     parser.add_option("--file", "-s")        

     options, args = parser.parse_args() 
     if options.a and obtions.b: 
      parser.error("Usage: [-s] file_name") 

      exit 

    def read_file(): 
     #Try: 
      #Open input file 
     #Except: 
      #print "Unable to open [filename]" 
      #Exit 
+0

あなたは混乱していること、または試したことがうまくいかなかったと思われる理由を述べることができますか? –

+0

そして、質問は? – abukaj

+0

@MT私がもっと混乱しているのは、ファイルを実際に読んで、それに基づいて何かを返す2番目の部分だと思います。私が今まで持っていたコードを実行すると、エラーは出ませんだから私はその部分が動作しているようだと思います – user6292348

答えて

0
from optparse import OptionParser 
import sys,os 

def command_line(): 
    parser = OptionParser("%prog [-s] file_name")   
    parser.add_option("-s",dest="filename", 
     metavar="file_name",help="my help message")        

    options, args = parser.parse_args() 
    if not options.filename: 
     parser.print_help() 
     sys.exit() 
    return options.filename 

def read_file(fn): 
    if os.path.isfile(fn): 
     typecount = {} 
     with open(fn) as f: 
      for line in f: 
       for i in line.split() 
        try: 
         t = type(eval(i)) 
        except NameError: 
         t = type(i) 
        if t in typecount: 
         typecount[t] += 1 
        else: 
         typecount[t] = 1 
    else: 
     print("Unable to open {}".format(fn)) 
     sys.exit() 

    print(typecount) 

read_file(command_line()) 

だから、ステップバイステップ:あなたは(好ましくは)オプション--aかを定義しない限り、

  • options.aが定義されていないdest="a"を設定します。
  • 内蔵のparser.print_help()を使用すると自分で作るよりも優れている場合は、無料で-h/--helpが得られます。
  • あなたは関数command_lineを呼び出すことはありません。したがって、構文が正しいので、エラーは発生しません。私は、コマンドラインに戻り値としてファイル名だけを渡すように設定しましたが、より多くのオプション/引数がある場合にこれを行うより良い方法があります。

ではなく試し-を除き、私は、ファイルが存在するかどうかを確認しますos.path.isfileを使用することをお勧めファイルのを使用しての、read_fileになります。これは、ファイルが正しいフォーマットを持っているかどうかをチェックしません。

次に、型の辞書を作成し、すべての行をループし、空白(空白、改行、タブ)で区切られたオブジェクトを評価します。あなたの値が例えばで区切られている場合。コンマ、line.split(',')を使用する必要があります。

スクリプトの後半でカウントを使用する場合は、印刷する代わりにtypecountを返すことができます。

関連する問題