2016-12-06 47 views
0

我想发现文本中的DNA序列中发现的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二进制序列,并想使成8位:

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

然后,这创建这样的输出:

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

虽然我有更长的输出,但我只包含了最后四个序列。

想知道如何将其转换为字母。

+1

您可以使用'sequence.encode()'将ASCII字符串转换为二进制(字节)。该函数用其8位ASCII码charcode替换每个字符。例如,'A'变成65.但你打算用这些位来做什么? – DyZ

+0

你好@DYZ,谢谢你的回复。我想用各自的ASCII字符替换这些8位系列(不只是这四个),因为我被告知它假设要揭示一首诗。我只是不知道现在怎么样,并且想知道是使用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

感谢您的建议。它真的帮了大忙! :) –