У меня есть файлы genbank, состоящие из нескольких аннотированных коннигов. То, что я хотел бы сделать, это разделить это на базу данных, в которой есть отдельные записи генов, содержащие каждую функцию «CDS», а также ее ДНК и последовательность аминокислот. Пока это работает очень хорошо:Извлеките последовательность dna по функции из файла genbank
for record in SeqIO.parse(open_file, 'gb'):
for feature in record.features:
if feature.type == 'CDS':
gene_record = {
'locus_tag':feature.qualifiers['locus_tag'][0],
'translation':feature.qualifiers['translation'][0],
}
У меня возникла проблема с получением последовательности dna. Файл GenBank отформатирован следующим образом:
FEATURES Location/Qualifiers
source 1..29869
/organism="Arthrobacter"
/mol_type="genomic DNA"
/strain="strain_name"
gene complement(4..462)
/locus_tag="ArthroDRAFT_00001"
CDS complement(4..462)
/locus_tag="ArthroDRAFT_00001"
/product="hypothetical protein"
/translation="LSTGKELLNYQSALNDIHDEFSRAQQSDAGVSHLSVAKITEKLS
YLKATALQMDDLFSVLRKQGVSLRSTGLADWASVPTIQDDKEEGKTEPSLAKKEISSR
TTSKPNKIDFPKFEYPDHGQPTNKIRVGTILDTFSESAFSYEWINVALQD"
gene complement(1126..1842)
/locus_tag="ArthroDRAFT_00002"
CDS complement(1126..1842)
/locus_tag="ArthroDRAFT_00002"
/product="hypothetical protein"
/translation="VPRAFIYGSCVGGDTANVFPSDWDRPTYVARQSIISAAFGPTSV
EGDIELTSAFQRSMLEGDIEATAFPRLRQELPTHDVLILDIVDERLGVYELAPGKYLT
RSMELISSKLIGKQPVTPRLIEFGSDEHYGLWTRSVDMLVDVVKHGGIPVFALLPPWS
EKSIQGEDLTWHSVSVDLMNNKYARYNEYLVQSEFTVVTVPDEEALGDAEHKWGLAPF
HYTESVYESLRDQILVGVSS"
...etc
ORIGIN
1 ccctcaatcc tgaagagcca cattgatcca ttcgtatgag aatgcagatt ccgagaatgt
61 atcaagaatt gttcctacac gtattttgtt tgtcggctgg ccgtggtccg gatactcaaa
121 ttttggaaag tcaatcttgt ...
Итак, у меня есть место для каждой функции, но мне нужно как-то разобрать последовательность ДНК, чтобы потянуть правильную последовательность ДНК, и я вроде в убыток как это сделать. feature.location
дает мне то, что кажется полезным выход:
[3:462](-)
[1125:1842](-)
[2159:3755](-)
[5190:5532](-)
[6226:6493](+)
Но единственный способ я знаю, чтобы использовать это было бы разобрать, что с помощью регулярных выражений, а затем сделать record.seq[start_num:finish_num]
. И затем, если он находится в сети, запустите все, что есть, через reverse_complement
.
Это кажется слишком запутанным, и я думал, что биопит должен иметь более эффективный способ, но я не могу его найти. Я заметил, что feature.location
уже, кажется, вычитал из него 1, чтобы учесть индекс python 0, так что число должно быть полезным ... правильно?
EDIT: SeqFeature.location
кажется, что это то, что я хочу использовать, но не могу понять, как: http://biopython.org/DIST/docs/api/Bio.SeqFeature.FeatureLocation-class.html
EDIT2: Похоже, что я могу сделать
record.seq[feature.location.start:feature.location.end]
Это делает еще не работа для негативного материала нити, хотя ...
Я нашел это через пару месяцев ... забыл вернуться и ответить на это - спасибо! – kevbonham