美文网首页
用Python将文本转换为DNA序列

用Python将文本转换为DNA序列

作者: Python_Camp | 来源:发表于2022-10-03 10:47 被阅读0次

用Python将文本转换为DNA序列
脱氧核糖核酸(DNA)是一种有前途的存储介质,能够存储和存档我们大量的数据。

当比特被转换为碱基时,数据可以在DNA中进行编码。

编码数据就是将其从一种形式转换为另一种形式。编码的图像、录音、视频和字符可以用来编译和执行程序,传输、存储和压缩/解压数据,以及转换文件。我决定将输入的文本编码为DNA序列,希望能将其储存起来。

以下是我是如何做到的。

关于该项目

在文本被映射到核苷酸序列之前,它必须被转换为二进制序列。在计算科学中,二进制序列用比特和字节表示对计算机的指令和数据类型。二进制数字,或比特,存储0或1,使它们成为最小的存储单位。8位组合在一起构成一个字节,如01011010和01000001。

核苷酸是一种由戊糖(5个碳原子)、一个磷酸基团和一个含氮碱基组成的化合物。在DNA中,4个含氮碱基是腺嘌呤、鸟嘌呤、胞嘧啶和胸腺嘧啶。它们的序列将为蛋白质编码并携带所有遗传信息。

核苷酸通过一个核苷酸的磷酸基和下一个核苷酸中戊糖的第3个碳原子之间的共价键连接在一起。因此,核苷酸的配对产生了糖-磷酸盐-糖-磷酸盐-等等的DNA骨架。这个序列形成一个多核苷酸链,2个盘绕的多核苷酸链产生了DNA的标志性双螺旋。

整个程序是基于一个简单的映射,其中2位序列被转换成核苷酸,每个核苷酸由一个字母(A、G、C或T)代表。

当DNA被测序时,有可能确定碱基的顺序,在普通的序列格式中,它们可以用一个字母表示。为了带来一个新的或修改过的序列,有可能将A、G、C或T移动一下。

关于DNA中的数字数据存储的更多信息,请阅读我以前的文章《数字数据存储的未来在于DNA》。

剖析该项目

起初,我用用户的输入设置了一个变量(original_str)。该文本的长度和内容可以不同,这完全取决于用户。

# set variable with input text
original_str = input("What would you like to convert? ")

然后,我使用了bytearray(source, encoding)方法,其中source是输入的文本(original_str),编码是UTF-8("utf-8")。UTF-8用1、2、3或4个字节表示输入文本中的每个字符。

因此,可以使用内置的 format(value, format_spec) 方法将每个整数值 (x) 转换为二进制,并通过指定格式 ("08b") 保留前导零。由此产生的二进制数包括所有前导0,总共有8位。因此,该字节列表用string.join(iterable)方法连接,成为一个字符串(binary_str)。

接下来,二进制字符串变成了一个列表(binary_list),被分成2比特长的项目。因为2位变成了1个核苷酸,所以binary_list中的每个项目都应该有2的长度。

# convert text to binary values
binary_str = ''.join(format(x, '08b') for x in bytearray(original_str, 'utf-8'))

binary_list = [binary_str[i: i+2] for i in range(0, len(binary_str), 2)]

然后我定义了一个字典(DNA_encoding),其中每个键代表二进制列表中可能的2位项目,每个值是其对应的核苷酸。

还设置了一个空列表(DNA_list),DNA_encoding中的值被附加到该列表中。一个for循环对二进制列表中的每一个2位项目进行迭代,另一个for循环对DNA_encoding中的每一个键进行迭代。当2位项与一个键相匹配时,该键的值被添加到DNA_list中。

# binary values to nucleotide sequence
# remember:
# 00 = "A" (adenine)
# 01 = "G" (guanine)
# 10 = "C" (cytosine)
# 11 = "T" (thymine)

DNA_encoding = {
    "00": "A",
    "01": "G",
    "10": "C",
    "11": "T"
} 
DNA_list = []
for num in binary_list:
    for key in list(DNA_encoding.keys()):
        if num == key:
            DNA_list.append(DNA_encoding.get(key))

DNA_str = "".join(DNA_list)

当DNA_list中的所有核苷酸被连接在一起时,就会产生一个新的字符串(DNA_str)。

最后,输入的文本(original_str)、二进制字符串(binary_str)和随后的核苷酸序列(DNA_str)都被打印出来(\n只是为了格式化输出)。

# print input text, binary code and DNA sequence
print("\nThe original string is :" + "\n" + original_str + "\n")
print("The string after binary conversion is :" + "\n" + binary_str + "\n")
print("The string represented by single-letter codes is :" + "\n" + DNA_str + "\n")

下面是一个输出的例子。

这个项目的下一步是什么?

接下来,这个程序可以将文件、图片和视频转换为二进制序列,从而转换为核苷酸序列。通过包括不仅仅是文本,不同类型的信息可以被编码并存储在DNA中。另外,包括所产生的序列的文件可以被下载,以用于计算和统计技术的硅分析。

此外,由于有了更多的防护性编码,各种规则和算法可以更好地保护数据。从一系列具有不同安全程度的算法中,用户可以选择最能满足他们需求的算法,帮助他们完成目标。

用密码子对英文字母中的字符进行编码的另一种方式
最后,可以建立一个网站,使该程序更容易使用,并允许任何人将个人信息编码为基数序列。网上有许多文本到二进制和二进制到文本的转换器,为什么没有一个文本到核苷酸的转换器呢?

本文由mdnice多平台发布

相关文章

  • 用Python将文本转换为DNA序列

    用Python将文本转换为DNA序列脱氧核糖核酸(DNA)是一种有前途的存储介质,能够存储和存档我们大量的数据。 ...

  • 04 文本预处理

    基础步骤 读入文本 分词 建立字典,将每个词映射到一个唯一的索引(index) 将文本从词的序列转换为索引的序列,...

  • 使用json模块

    json模块是python内置的用于序列化的模块。 序列化和反序列化 序列化就是将python类型的数据结构转换为...

  • Json

    json.loads() :将字符串转换为Python数据类型json.dumps() :将Python数据类型转...

  • 2020-02-09 Python文本处理

    1. Python编码解码 将文本转换为二进制数据就是编码,将二进制数据转换为文本就是解码。编码和解码要按照一定的...

  • Keras使用精选

    参考文献 使用Keras进行LSTM实战 将时间序列预测问题转换为python中的监督学习问题 时间序列交叉验证 ...

  • Rest framework-序列化组件(Serializers

    序列化组件(Serializers) 序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数...

  • Excel技巧之DATEVALUE函数

    说明 DATEVALUE 函数将存储为文本的日期转换为 Excel 识别为日期的序列号。 例如,公式=DATEVA...

  • pickle- Python对象序列化

    pickle模块实现Python对象结构的二进制协议序列化和反序列化。pickling将Python对象层次结构转...

  • android中序列化的使用

    1.概述 序列化:将内存中的java对象转换为字节序列并存储在本地。反序列化:将本地的字节序列转换为java对象。...

网友评论

      本文标题:用Python将文本转换为DNA序列

      本文链接:https://www.haomeiwen.com/subject/rnfeartx.html