2016-05-16 19 views
0

ファイル内の行の順序が「尊重」されるように入力パルメータの値をファイルと比較するにはどうすればよいですか?例えば:入力をファイルと比較してシーケンスを指定する

ファイルsequence.txtはenteries

aaa 
bbb 
ccc 
ddd 

を以下ており、入力(昏睡を伴う)のように来ている:

./run.py -c migrate -s ddd,bbb 

は、出力は次のようである:

bbb 
ddd 

これまでに働いていたスクリプトはこちらです

#!/usr/bin/python 

import sys 
import getopt 
import time 
import os 

def main(argv): 
    cmd = '' 
    schemas = '' 

    script_dir = os.path.dirname(__file__) 
    seq_file = "system/sequence.txt" 
    abs_file_path = os.path.join(script_dir, seq_file) 

    try: 
     opts, args = getopt.getopt(argv,"h:c:s",["cmd=","schemas="]) 
    except getopt.GetoptError: 
     print './run.py -c=<command> -s=<schemas> ' 
     sys.exit(2) 

    for opt, arg in opts: 
     if opt == '-h': 
      print './run.py -c=<command> -s=<schemas>' 
      sys.exit() 
     elif opt in ("-c", "--cmd"): 
      cmd = arg 
     elif opt in ("-s", "--schemas"): 
      schemas = arg 
    if cmd == "migrate" : 
     with open(abs_file_path) as z: 
      for line in z: 
      print line.rstrip('\n') 

if __name__ == "__main__": 
    main(sys.argv[1:]) 

私は位置print line.rstrip('\n')で比較を行う必要があることを知っていますが、その方法を理解できません。助言がありますか?

また、-cが "migrate"値を持っている場合は、-sスイッチを必須にすることはできますか?

ありがとうございます。

+1

私は非常にHTTPS([ 'argparse'](https://docs.python.org/2/library/argparse.html)モジュールに見て、この場合は、[サブコマンド]お勧めします: //docs.python.org/2/library/argparse.html#sub-commands)。 –

+0

お薦めのIlja氏に感謝します。私はPythonでかなり新しくて、これを知りませんでしたし、これを実行してテストするためにさらに2日を要しました。私はこれら2つの真夜中のオイルを燃やすつもりだと思う: – Jaanna

答えて

1

シーケンスの現在の行が-sフラグで指定されているかどうかを確認する必要があります。したがって、schemasの値を変更して、すべてのスキーマを含むリストにして、現在の行がスキーマの1つと等しいかどうかを確認する必要があります。あなたの2番目の質問については、私はgetoptに精通していませんが、-cmigrateのときにスキーマが空でないかどうかをチェックし、適切なエラー処理を行います。

[...] 
schemas = [] 
[...] 
    elif opt in ("-s", "--schemas"): 
     schemas = arg.split(',') 
[...] 
if cmd == 'migrate': 
    if not schemas: # list is empty 
     # do error handling 
    for line in z: 
     if line in schemas: 
      print line 
+0

ありがとう..はい、これはうまくいった。 – Jaanna

関連する問題