У меня есть таблица вариантов (ification.txt ), которая представляет собой очень большой файл.Первый столбец в номере хромосомы , а второй столбец - это позиция варианта.У меня есть второй файл annotation.txt , в котором содержится список из 37 000 генов ( 1-й столбец ), номер их хромосомы ( 2-й столбец ), их начало и конецкоординаты ( 3-й столбец ), за которыми следуют некоторые детали
Я должен назначить вариации (на основе номера хромосомы и ее положения) генам.Во-первых, он должен искать совпадающее число хромосом в обоих файлах, и, если оно совпадает, координата вариации должна находиться в пределах (включая) начальную и конечную позиции гена.Я пытался сделать это в Python, но заняло много времени .Более того, я хочу иметь модифицированный вывод, как показано ниже.Гены могут иметь перекрывающиеся координаты, и данный вариант может быть частью нескольких перекрывающихся генов.Пожалуйста, помогите.
Вариант.txt
SL3.0ch02 702679 C A - - - - - - - -
SL3.0ch01 711131 A G - - - - - - - -
SL3.0ch00 715124 G A - - - - - - - -
SL3.0ch00 719289 C T - - - - - - - -
SL3.0ch00 720926 A C - - - - - - - -
SL3.0ch00 723860 A C Solyc00g005060.1 CDS NONSYNONYMOUS W/G 52 0 novel DELETERIOUS (*WARNING! Low confidence)
SL3.0ch00 723867 A C Solyc00g005060.1 CDS SYNONYMOUS G/G 49 1 novel TOLERATED
SL3.0ch00 723903 T C Solyc00g005060.1 CDS SYNONYMOUS G/G 37 1 novel TOLERATED
annotation.txt
Solyc00g005000.3.1 SL3.0ch02 702600 702900 + Eukaryotic aspartyl protease family protein
Solyc00g005040.3.1 SL3.0ch01 715100 715200 + Potassium channel
Solyc00g005050.3.1 SL3.0ch00 715150 715300 - UPF0664 stress-induced protein C29B12.11c
Solyc00g005060.1.1 SL3.0ch00 723741 724013 - LOW QUALITY:Cyclin/Brf1-like TBP-binding protein
Solyc00g005080.2.1 SL3.0ch00 723800 723900 - LOW QUALITY:Protein Ycf2
Solyc00g005084.1.1 SL3.0ch05 809593 813633 + UDP-Glycosyltransferase superfamily protein
Solyc00g005090.1.1 SL3.0ch07 1061632 1061916 - LOW QUALITY:DYNAMIN-like 1B
Solyc00g005092.1.1 SL3.0ch01 1127794 1144385 + Serine/threonine phosphatase-like protein
Solyc00g005094.1.1 SL3.0ch00 1144958 1146952 - Glucose-6-phosphate 1-dehydrogenase 3, chloroplastic
Solyc00g005096.1.1 SL3.0ch00 1734562 1736567 + RWP-RK domain-containing protein
Желаемый выход:
SL3.0ch02 702679 C A - - - - - - - - Solyc00g005000.3.1
SL3.0ch00 715124 G A - - - - - - - - Solyc00g005040.3.1
SL3.0ch00 723860 A C Solyc00g005060.1 CDS NONSYNONYMOUS W/G 52 0 novel DELETERIOUS (*WARNING! Low confidence) Solyc00g005060.1.1
SL3.0ch00 723860 A C Solyc00g005060.1 CDS NONSYNONYMOUS W/G 52 0 novel DELETERIOUS (*WARNING! Low confidence) Solyc00g005080.2.1
SL3.0ch00 723867 A C Solyc00g005060.1 CDS SYNONYMOUS G/G 49 1 novel TOLERATED Solyc00g005060.1.1
SL3.0ch00 723867 A C Solyc00g005060.1 CDS SYNONYMOUS G/G 49 1 novel TOLERATED Solyc00g005080.2.1
SL3.0ch00 723903 T C Solyc00g005060.1 CDS SYNONYMOUS G/G 37 1 novel TOLERATED Solyc00g005060.1.1
Код:
import re
file1 = open("variation", "r")
file2 = open("annotation.txt", "r")
probe_id = file1.read().splitlines()
loc_id = file2.read().splitlines()
for i in probe_id:
i=i.rstrip()
probe_info=i.split('\t')
probe_info[1]=probe_info[1].strip()
probe_info[0]=probe_info[0].strip()
#print probe_info[1]
gene_list=[]
for j in loc_id:
loc_info=j.split('\t')
loc_info[2]=loc_info[2].strip()
loc_info[3]=loc_info[3].strip()
if loc_info[1]==probe_info[0]:
if (int(probe_info[1]) >= int(loc_info[2])):
if (int(probe_info[1]) <=int(loc_info[3])):
gene_list.append(loc_info[0])
if len(gene_list)!=0:
print i+"\t"+str(gene_list)
Токовый выход:
SL3.0ch02 702679 C A - - - - - - - - ['Solyc00g005000.3.1']
SL3.0ch00 715124 G A - - - - - - - - ['Solyc00g005040.3.1']
SL3.0ch00 723860 A C Solyc00g005060.1 CDS NONSYNONYMOUS W/G 52 0 novel DELETERIOUS (*WARNING! Low confidence) ['Solyc00g005060.1.1', 'Solyc00g005080.2.1']
SL3.0ch00 723867 A C Solyc00g005060.1 CDS SYNONYMOUS G/G 49 1 novel TOLERATED ['Solyc00g005060.1.1', 'Solyc00g005080.2.1']
SL3.0ch00 723903 T C Solyc00g005060.1 CDS SYNONYMOUS G/G 37 1 novel TOLERATED ['Solyc00g005060.1.1']