【问题标题】:Decode in Python用 Python 解码
【发布时间】:2016-12-06 22:53:00
【问题描述】:

我正在尝试从文件中的 DNA 序列中发现以 ASCII 编码的文本。

下面是我的代码:

首先是打开FASTA文件,set是一个变量。

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'

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

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

【问题讨论】:

  • 您可以使用 sequence.encode() 将 ASCII 字符串转换为二进制(字节)。该函数将每个字符替换为其 8 位 ASCII 字符码。例如,“A”变为 65。但是您接下来打算如何处理这些位?
  • 您好@DYZ,感谢您的回复。我想用相应的 ASCII 字符替换这一系列 8 位(不仅仅是这四个),因为我被告知它应该揭示一首诗。我只是不知道如何使用并且想知道是否使用 encode() 或 decode() 或者是否有不同的方法。我希望我说得通。我是编程世界的新手。
  • 我不应该使用 ord() 而是相应地翻译每个字母 ([A,C=0][T,G=1])。我只是不确定现在从哪里开始。

标签: python decode encode translate binascii


【解决方案1】:

例如a = '10010000',你可以的

b = chr(int(a, 2))

首先将a 转换为基于二进制数的整数,然后将该整数解释为字符。请注意,其中许多 8 位整数不会产生可读字符!

一个具体的例子是

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

导致'x' 被打印出来。

【讨论】:

  • 非常感谢您的回复。我尝试做 b = chr(int(binarysequence,2)) 但 Python 告诉我它太大了。我试图避免手动输入每个字节,因为我有太多字节,而且我确信有一种更简单的方法。我只是不确定它是什么。再次感谢。
  • 你是什么意思手动?为什么不在你的循环中使用chr(int(binarysequence[i:i+8], 2)) 并在你进行时将结果附加到一个列表中?
  • 感谢您的建议。它真的有帮助! :)
  • 我想我偶然发现了另一个问题。这不是我期望的输出(应该是一首诗),但它确实给了我一些字母,所以我在想可能需要使用 binascii?但仍在阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2019-12-19
  • 2012-04-10
相关资源
最近更新 更多