2012-04-26 10 views
1

私はここに複数のコードを置いているので、実際にそれらの機能を実行するために問題が発生しています。ユーザによって入力されたときに「スプライシングされた遺伝子配列を求める「スイッチ」を示していると、オプションの最初のパラメータ「-s」を有する2つのコードを一緒にして機能させる

def getGenes(spliced, infile, outfile): 

私は機能を有しています。したがって、私はこれでそれに続いた(さらに、場合ランsys.agrv [1] =スプライシングさsys.argvの[2] = INFILEとsys.argvの[3] = OUTFILE):

import sys 
spliced = False 
if '-s' in sys.argv: 
    spliced = True 
    infile, outfile = sys.argv[2:] 

今、か最初のステートメントは、スプライシングされたパラメータが与えられたとき、第二(他の部分は)ときに書き込まれるべきで記述する必要があります

fp = open(infile, 'r') 
for line in fp: 
    line = line.replace(',',' ') 
    tokens = line.split() 
    if '-s' in sys.argv and r: 
     wp.write('>'+tokens[0]+'|'+tokens[1]+'('+tokens[2]+')'+':'+int(tokens[3])+'-'+int(tokens[4])+'|'+int(tokens[5])+'-'+int(tokens[10])+','+int(tokens[8])+'-'+int(tokens[11])) 
    else: 
     wp.write('>'+tokens[0]+'|'+tokens[1]+'('+tokens[2]+')'+':'+int(tokens[3])+'-'+int(tokens[4])) 

:かいないファイルは、私はoutfileにINFILEから次のことを書きたいスイッチが含まれていますスプライスされたパラメータは与えられない)。上のコードは、出力ファイルの次の行に続くシーケンスの情報行を作成します。

これに続いて、ファイル内の行に特定の場所に '+'または ' - 'が含まれているかどうかによって、別のファイルにアクセスして特定の座標の文字列を引き出します。取り出されるこの部分は、上の対応する行の下に直接記述する必要があります。ですから、スプライスされたパラメータとスプライスされていないパラメータの両方に '+'と ' - 'の部分があるはずです。 - 存在している「」

fp2 = open('chr22.fa', 'r') 
for line in fp2: 
    newstring = '' 
    z = line.strip() 
    newstring += z 
for line in fp: 
    fields = line.split('\t') 
    gene_ID, chr, strand = fields[:2] 
    start = int(fields[3]) 
    end = int(fields[4]) 
    bc = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'N':'N'}  
    if strand == '+': 
     wp.write(newstring[start:end]) 
    if strand == '-': 
     newstart, newend = -(start + 1), -(end + 1) 
     wp.write(bc[base.upper()] for base in newstring[newstart:newend]) 

あなたが見ることができるように、私はそれは「+」またはAかどうかに応じて、ファイルのうちの異なる部分を選択があります。私は、次のコードを持っています。つまり、スプライスされたオプションとスプライスされていないオプションの両方にこれを使用する必要があります。しかし、このファイルから引かれた各行(または文字列)は、対応する情報行(最後のコードで作成されたもの)と共に置かれなければなりません。ここのコードは、別のファイルからシーケンスを取り出して翻訳しています。

私は私のOUTFILEのフォーマットが持つように、何とか一緒にコードのこれら2つを配置する必要があり

情報

対応する配列を

を別のインフォライン

対応する配列

+3

ファイルを開くための['' with''ステートメント](http://docs.python.org/reference/compound_stmts.html#the-with-with-statement)と、ファイルを開くための['' argparse'' '' sys.argv''を直接使うのではなく、 ''モジュール ''(http://docs.python.org/library/argparse.html#module-argparse) –

+1

あなたはこれに恩恵を払うことをお勧めします。誰でもこのテキストの壁を読んでも邪魔にならないでしょう:P私の意見、GLまたはもっと再開したバージョンを作ることができます...あなたの質問に答えるのに本当に必要なすべての情報です/問題?たぶん私はちょうど今怠惰だ – KurzedMetal

+1

Python2.6以前のバージョンで作業している場合(コマンドラインを解析するためにargparseをダウンロードするのが面倒です)、optparseもこの例でも動作します(ただし、argparseは* WAY *他の多くのタスクので、私はおそらく1つを最初にお勧めします) – mgilson

答えて

1

あなたはちょうど1つ、次にもう1つはできません:

for line in fp: 
    # Info line 
    line = line.replace(',',' ') 
    tokens = line.split() 
    if '-s' in sys.argv and r: 
    wp.write('>'+tokens[0]+'|'+tokens[1]+'('+tokens[2]+')'+':'+int(tokens[3])+'-'+int(tokens[4])+'|'+int(tokens[5])+'-'+int(tokens[10])+','+int(tokens[8])+'-'+int(tokens[11])) 
    else: 
    wp.write('>'+tokens[0]+'|'+tokens[1]+'('+tokens[2]+')'+':'+int(tokens[3])+'-'+int(tokens[4])) 

    # Sequence line 
    fields = line.split('\t') 
    gene_ID, chr, strand = fields[:2] 
    start = int(fields[3]) 
    end = int(fields[4]) 
    bc = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'N':'N'}  
    if strand == '+': 
    wp.write(newstring[start:end]) 
    if strand == '-': 
    newstart, newend = -(start + 1), -(end + 1) 
    wp.write(bc[base.upper()] for base in newstring[newstart:newend]) 

ここに何か不足していますか?

関連する問題