-3

次のような行を含むファイルがあります。

NM_198212 chr7 + 115926679 115935830 115927071 11593344 2 115926679,115933260, (この列に興味があります。これらの数字はエクソンの始まりとして知られています) 115927221,115935830, (そしてこれはエクソンの終わりとして知られています)

最後の 2 つの列 (コンマで区切られた列) には、可変量の整数を含めることができます。つまり、カンマで区切られた 5 つの数字、または 15 の数字を持つことができます。

ファイルの最初の行がある場合、次のような行が必要です。

NM_198212|chr7(+):115926679-115935830|115926679-115927221,115933260-115935830 (ただし、これは指定された開始と終了の量に基づいて行われる可能性があります)

より単純なスケールでは:

NM_???? chr12 - 10 110 10 110 3 10,50,100, 20,60,110,

その情報行の終わりを 10-20,50-60,100-110 にしたいと思います

数値の量に関係なく、出力したい行末にこれらのそれぞれを含めるようにコードを書くにはどうすればよいでしょうか。

役立つ場合は、すべての開始と終了をペアにするこのコードがあります。

fp = (infile, 'r')
for line in fp:
   tokens = line.split()
   exonstarts = tokens[8][:-1].split(',')
   exonends = tokens[9][:-1].split(',')
   zipped = list(zip(exonstarts, exonends))

上記の例の場合、圧縮は [(10, 20), (50, 60), (100, 110)] になります。私の質問は、これを目的の情報行に組み込む方法です (開始と終了を組み込む部分を除いて、式全体を記述しています。

したがって、これらをリストから取り出して、希望する形式にする方法がわかりません。

4

1 に答える 1

2

これがあなたが求めているものかどうかはわかりませんが、

range_str = ",".join(["%s-%s" % item for item in zipped])

圧縮された場合 == [(10, 20), (50, 60), (100, 110)]

10-20,50-60,100-110
于 2012-04-28T01:52:26.557 に答える