1

ここには複数のコードがあり、それらをまとめる際に問題が発生しているため、関数が実際に実行されます。

私は機能を持っています:

def getGenes(spliced, infile, outfile):

オプションの最初のパラメーター「-s」を持ち、ユーザーが入力すると、「スプライシングされた遺伝子配列」を呼び出す「スイッチ」を示します。したがって、私はこれに続いた(さらに、実行時.sys.agrv [1] = spliced sys.argv [2] = infileおよびsys.argv [3] = outfile):

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

ここで、ファイルにスイッチが含まれているかどうかに関係なく、infile から outfile に次のように書き込みます。

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]))

spliced パラメータが指定されている場合は最初のステートメントを記述し、spliced パラメータが指定されていない場合は 2 番目のステートメント (else 部分) を記述します)。上記のコードは、出力ファイルの次の行に続くシーケンスの情報行を作成します。

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

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]) 

ご覧のとおり、「+」または「-」が存在するかどうかに応じて、ファイルから別の部分を選択するようにしています。とはいえ、これをスプライスされたオプションとスプライスされていないオプションの両方に使用する必要があります。ただし、このファイルから取得した各行 (または文字列) は、対応する情報行 (コードの最後の部分で作成) と共に配置する必要があります。このコードは、別のファイルからシーケンスを取得して変換しています。

出力ファイルの形式が次のようになるように、これら 2 つのコードを何らかの方法でまとめる必要があります。

情報

対応する配列

別の情報行

対応する配列

4

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])

それとも、ここで何か不足していますか?

于 2012-04-26T13:53:47.317 に答える