2016-12-06 24 views
0

Я пытаюсь обнаружить текст, закодированный в ASCII, найденный в последовательности ДНК из файла.Декодирование в Python

Ниже мой код:

Первый открыть файл FASTA и установить является переменной.

with open("/home/<username>/python/progseq") as mydnaseq: 
    sequence = mydnaseq.read().replace('\n','') 

Это второй бит, чтобы перевести последовательность в двоичную и сделал это для буквы C и G/T равным 1:

binarysequence = sequence.replace('A','0') 

Затем я взял эту loooooong двоичную последовательность и хотел сделать это в 8bits:

for i in range(0,len(binarysequence),8): 
    binarysequence [i:i+8] 

Это то создал такой вывод:

'00110100' 
    '00110010' 
    '01000110' 
    '00011000' 
    '0' 

Хотя у меня был гораздо более длинный выход, я включил только последние четыре последовательности.

Хотел бы узнать, как его преобразовать в буквы.

+1

Вы можете преобразовать строку ASCII в двоичную (байты) с помощью 'sequence.encode()'. Функция заменяет каждый символ 8-битным ASCII-символом. Например, «A» становится 65. Но что вы планируете делать дальше с этими битами? – DyZ

+0

Здравствуйте, @DYZ, спасибо, что ответили. Я хотел заменить эти серии из 8 бит (а не только на эти четыре) соответствующим символом ASCII, так как мне говорят, что он должен показать стихотворение. Я еще не знаю, как это сделать, и задавался вопросом, следует ли использовать encode() или decode() или если существует другой способ приближения. Надеюсь, у меня есть смысл. Я новичок в мире программирования. –

+0

Я не должен был использовать ord(), но переводить каждую букву ([A, C = 0] [T, G = 1]) соответственно. Я просто не знаю, с чего начать. –

ответ

0

С, например. a = '10010000', вы можете сделать

b = chr(int(a, 2)) 

для первого преобразования a в целое на основе двоичного числа, а затем интерпретировать это число как символ. Обратите внимание, что многие из этих 8-битных целых чисел не приведут к чтению символов!

Конкретным примером является

b = chr(int('01111000', 2)) 
print(b) 

которые приводят к 'x' печати.

+0

Большое спасибо за ответ. Я пробовал делать b = chr (int (binarysequence, 2)), но Python сказал мне, что он слишком велик. Я пытаюсь избежать ввода вручную каждого байта, поскольку у меня их слишком много, и я уверен, что есть более простой способ. Я просто не знаю, что это такое. Еще раз спасибо. –

+0

Что значит * вручную *? Почему бы просто не использовать 'chr (int (binarysequence [i: i + 8], 2))' в вашем цикле и, возможно, добавить результат в список по ходу? –

+0

Спасибо за ваше предложение. Это действительно помогло! :) –

 Смежные вопросы

  • Нет связанных вопросов^_^