###前提・実現したいこと
pythonでオプション("-3"や"-6")をつけて場合分けをし、さらに引数としてファイルを読み込みファイルの中身について操作を行うプログラムを作ろうとしています。
具体的に書くと、ターミナルで
$ python PracticeD-3.py test.fa
として実行すると、ファイル"test.fa"を読み込み、関数"frame1"のみを実行する
$ python PracticeD-3.py -3 test.fa
として実行すると、ファイル"test.fa"を読み込み、関数"frame1"と"frame3"を順番に実行する
$ python PracticeD-3.py -6 test.fa
として実行すると、ファイル"test.fa"を読み込み、関数"frame1"と"frame3"と"frame6"を順番に実行する
というようなプログラムを作ろうとしています。
しかし、実装すると下記のような実行となりうまくいきません。
なお、ファイル"test.fa"の中身は次の通りです。
sequence1
ccg agc aga gct ttc tgg aga gag gaa gag gaa gag gaa gtg gga ggc ggg ccc tag
###発生している問題・エラーメッセージ
オプション無しの場合は、 $ python PracticeD-3.py test.fa として実行すると、 >sequence1 ccg agc aga gct ttc tgg aga gag gaa gag gaa gag gaa gtg gga ggc ggg ccc tag frame1 と出力され問題ないのですが、 "-3"のオプションをつけて、 $ python PracticeD-3.py -3 test.fa として実行すると、 >sequence1 ccg agc aga gct ttc tgg aga gag gaa gag gaa gag gaa gtg gga ggc ggg ccc tag frame1 frame3 と出力され、関数"frame1"が実行された後、ファイルの中身がうまく読み込めないか、なくなってしまっているのです。 オプション"-6"の時も同様で、 python PracticeD-3.py -6 test.fa >sequence1 ccg agc aga gct ttc tgg aga gag gaa gag gaa gag gaa gtg gga ggc ggg ccc tag frame1 frame3 frame6 となってしまいます。 argparseの仕様がよくわかっていないことが大きいと思いますが、どうすれば $ python PracticeD-3.py -3 test.fa >sequence1 ccg agc aga gct ttc tgg aga gag gaa gag gaa gag gaa gtg gga ggc ggg ccc tag frame1 >sequence1 ccg agc aga gct ttc tgg aga gag gaa gag gaa gag gaa gtg gga ggc ggg ccc tag frame3 といったように、関数ごとにうまく実行できるでしょうか。 ご助言よろしくお願いします。
###該当のソースコード
#!/usr/bin/env python # coding: utf-8 import sys import argparse def main(): parser = argparse.ArgumentParser(description='Process options') group = parser.add_mutually_exclusive_group() group.add_argument('-3', dest='frame3', action='store_true', default=False, help='recognize -3') group.add_argument('-6', dest='frame6', action='store_true', default=False, help='recognize -6') parser.add_argument('file', type=file) args = parser.parse_args() if args.frame3: test_file1 = args.file test_file2 = args.file frame1(test_file1) frame3(test_file2) elif args.frame6: test_file1 = args.file test_file2 = args.file test_file3 = args.file frame1(test_file1) frame3(test_file2) frame6(test_file3) else: frame1(args.file) def frame1(f): for i in f: print i, print "frame1" def frame3(f): for i in f: print i print "frame3" def frame6(f): for i in f: print i print "frame6" if __name__ == "__main__": main()
###補足情報(言語/FW/ツール等のバージョンなど)
テキストエディタ:atom
実行環境:python2.7.10
なお、質問のために関数は単純なものにしてあります。
あくまで問題解決のための即席関数です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/31 02:57