0

次のスクリプトを作成して、各コンテンツの遺伝子数を取得しました。うまく機能しますがID list、入力として使用する の順序が出力に保存されません。入力コンティグリストが発現レベルに応じて順序付けられるのと同じ順序を維持する必要があります。誰か助けてもらえますか? ご協力いただきありがとうございます。

from collections import defaultdict
import numpy as np
gene_list = {}
for line in open('idlist.txt'):
    columns = line.strip().split()
    gene = columns[0]
    rien = columns[1]
    gene_list[gene] = rien
gene_count = defaultdict(lambda: np.zeros(6, dtype=int))
out_file= open('out.txt','w')

esem_file = open('Aquilonia.txt')
esem_file.readline()
for line in esem_file:
    fields = line.strip().split()
    exon = fields[0]
    numbers = [float(field) for field in fields[1:]]
    if exon in gene_list.keys():
         gene = gene_list[exon]
         gene_count[gene] += numbers
         print >> out_file, gene, gene_count[gene]

input file:
comp54678_c0_seq3
comp56871_c2_seq8
comp56466_c0_seq5
comp57004_c0_seq1
comp54990_c0_seq11
...
output file comes back in numerical order:
comp100235_c0_seq1 [22 13 15  6 15 16]
comp101274_c0_seq1 [55  2 27 26  6  6]
comp101915_c0_seq1 [20  2 34 12  8  7]
comp101956_c0_seq1 [13 21 11 17 17 28]
comp101964_c0_seq1 [30 73 45 36  0  1]
4

1 に答える 1

5

使用しcollections.OrderedDict()ます。エントリを入力順に保持します。

from collections import OrderedDict

with open('idlist.txt') as idlist:
    gene_list = OrderedDict(line.split(None, 1) for line in idlist)

上記のコードは、 gene_list1 行を使用して順序付けされた辞書を読み取ります。

ただし、純粋に入力ファイル行の順序に基づいて出力ファイルを生成するように見えます。

for line in esem_file:
    # ...
    if exon in gene_list:  # no need to call `.keys()` here
        gene = gene_list[exon]
        gene_count[gene] += numbers
        print >> out_file, gene, gene_count[gene]

最初にカウントを収集するようにコードを修正し、次に別のループを使用してデータを書き出します。

with open('Aquilonia.txt') as esem_file:
    next(esem_file, None)  # skip first line
    for line in esem_file:
        fields = line.split()
        exon = fields[0]
        numbers = [float(field) for field in fields[1:]]
        if exon in gene_list:
             gene_count[gene_list[exon]] += numbers

with open('out.txt','w') as out_file:
    for gene in gene_list:
        print >> out_file, gene, gene_count[gene]
于 2013-06-17T10:52:45.433 に答える