0

タンパク質 ID を含むファイルから辞書のリストを作成するスクリプトを作成しようとしています。これは私が今まで書いたものです:

#import packages
import sys

#get the file from the command line
map_file =  sys.argv[1]


#create dictionaries containing the different proteins IDs
def get_mapping(map_file):
        file = open(map_file)
    result = list() 
    column_count = file.readline().split('\t')  
    n = len(column_count)
    for i in range(n-1):
        result.append({})
    for line in file:
        word = line.split('\t')
        for w in range(n):
            if word[n-1] <> word[0]:
                result[n-2][word[n-1]] = word[0]
            n = n-1         
    return result

print get_mapping(map_file)

したがって、入力ファイルには多くの行が含まれており、各行には特定のタンパク質の 2 ~ 4 の異なる ID が含まれています。行の最初の ID を値として、他の ID の 1 つをキーとして持つ辞書のリストを作成したいと考えています。このスクリプトを実行すると、やりたいことを正確に実行しますが、入力ファイルの最初の行に対してのみです。入力ファイルのすべての行に対してこれを行うには、何を変更する必要がありますか?

タンパク質ファイルは次のようになります。

Ensembl_Protein_ID UniProt/SwissProt_Accession UniProt/TrEMBL_Accession RGD_ID 
ENSRNOP00000000008 P18088 C9E895 2652 
ENSRNOP00000000008 P18088 B3VQJ0 2652 
ENSRNOP00000000009 D3ZEM1 1310201 
ENSRNOP00000000025 B4F7C7 
ENSRNOP00000000029 Q9ES39 620038 
ENSRNOP00000000037 Q7TQM3 735156 
ENSRNOP00000000052 O70352 Q6IN14 69070 
ENSRNOP00000000053 Q9JLM2 68400 
ENSRNOP00000000064 P97874 621589 
ENSRNOP00000000072 P29419 621377 
ENSRNOP00000000074 B2RZ28 1304584 
ENSRNOP00000000078 D3ZDI7 1308022 
ENSRNOP00000000080 Q5XI68 1305201 
ENSRNOP00000000085 D3ZDH7
4

1 に答える 1

0

n内側のループで減少しますforが、元の値にリセットしません。ループn = len(column_count)の前または後に追加するだけで機能します。for w in range(n):またはさらに良いのは、w変数を減らす代わりに、変数を直接使用することnです。

for w in range(1, len(word)):
    if word[w] <> word[0]:
        result[w-1][word[w]] = word[0]

また、column_count = file.readline().split('\t')問題になる可能性があることに注意してください。まず、あなたの質問から判断すると、最初の行が1行あたりの最大数の単語を保持するかどうかは明確ではありません。2 番目に、この行は2 番目のループで再度読み込まれないfor line in fileことに注意してください。したがって、これが何らかのヘッダー行でない限り、一部の ID が失われます。更新:これヘッダーであり、すべての列をリストしているため、まったく問題ありません。

最後に、ファイルを閉じる (file.close()メソッドの最後に追加する) か、withステートメントを使用する必要があります。このブロックの最後で、ファイルは自動的に適切に閉じられます。

with open(map_file) as f:
    # your code
于 2013-10-02T10:52:25.770 に答える