これを考慮してください、私は File1 を持っています:
SNP_ID GENE_ID # Header not present in original file
rs1 TRIML1,TRIML2
rs2 D4S234E
rs4 ACCN5,CTSO
rs5 ODZ3
rs6 TRIML1
およびファイル 2:
SNP1_ID SNP2_ID DRUG # Header not present in original file
rs1 rs2 xyz
rs1 rs8 abc
rs2 rs4 xyz
rs2 rs5 abc1
rs5 rs7 abc2
rs6 rs5 xyz1
file2 の SNP ID を file1 に一致させ、対応する遺伝子 ID に置き換え、出力に薬物名も含めたいと考えています。出力は次のようになります。
GENE1_ID GENE2_ID SNP1_ID SNP2_ID Drug
TRIML1 D4S234E rs1 rs2 xyz
TRIML2 D4S234E rs1 rs2 xyz
TRIML1 rs8 rs1 rs8 abc
TRIML2 rs8 rs1 rs8 abc
D4S234E ACCN5 rs2 rs4 xyz
D4S234E CTSO rs2 rs4 xyz
D4S234E ODZ3 rs2 rs5 abc1
ODZ3 rs7 rs5 rs7 abc2
TRIML1 ODZ3 rs6 rs5 xyz1
一致と置換を行う次のコードを書きましたが、出力の最後の 3 列を取得する方法がわかりません。また、大きなファイルでこれを行う必要がある場合、これにはかなりの時間がかかります。それを効率的に行うためのインプット??
snp_gene_dict = {}
with open('File1') as f1:
for line in f1:
snp_key = line.split()[0]
vals = line.split()[1]
gene_val = vals.split(',')
snp_gene_dict[snp_key] = gene_val
col0 = []
col1 = []
snp_first_col = []
snp_second_col = []
with open('File2') as f2:
for line in f2:
snp0, snp1 = line.split()
col0.append(snp0)
col1.append(snp1)
for i in range(len(col0)):
if col0[i] in snp_gene_dict.keys():
snp_first_col.append(snp_gene_dict[col0[i]])
else:
snp_first_col.append([col0[i]])
for i in range(len(col1)):
if col1[i] in snp_gene_dict.keys():
snp_second_col.append(snp_gene_dict[col1[i]])
else:
snp_second_col.append([col1[i]])
with open('output-gene-gene', 'w') as out:
for i,j in map(None,snp_first_col,snp_second_col):
if len(i) == 1 and len(j) == 1:
out.write ('{a}\t{b} \n'.format(a = '\t'.join(i), b = '\t'.join(j)))
elif len(i) > 1 and len(j) == 1:
for item in i:
out.write ('{a}\t{b} \n'.format(a = item, b = '\t'.join(j)))
elif len(j) > 1 and len(i) == 1:
for item in j:
out.write ('{a}\t{b} \n'.format(a = '\t'.join(i), b= item))
elif len(i) > 1 and len(j) > 1:
for elem1 in i:
for elem2 in j:
out.write('{a}\t{b} \n'.format(a = elem1, b = elem2))