用Python将文本转换为DNA序列
用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 textoriginal_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 valuesbinary_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 sequenceprint("\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][4][文本和字节序列]
第4章 文本和字节序列 人类使用文本,计算机使用字节序列.--------Esther Nam和Travis Fischer Python3明确地区分了人类可读的文本字符串和原始的字节序列 4.1 字 ...
- python单位转换编程_如何使用python编程将一组DNA序列转换为蛋白...
我正在使用python创建一个程序,该程序将一组DNA序列转换为氨基酸(蛋白质)序列.然后,我需要找到一个特定的子序列,并计算存在该特定子序列的序列数.这是我到目前为止的代码: #Open cDNA_ ...
- 【python】文本转换为语音——pyttsx3模块的使用
文本转换为语音(pyttsx3模块) pyttsx3模块 文本转换为语音(pyttsx3模块) 一.pyttsx3的概述 二.简单应用 三.一些实例 四.官方文档节选 一.pyttsx3的概述 pyt ...
- 用python把文本转换为数字
可以使用 Python 的内置函数 int() 或 float() 将文本转换为数字.例如: text = "123" number = int(text) print(numbe ...
- Python中文本和字节序列的处理
文本和字节序列 字节问题 字节概要 基本的编解码器 编码问题 处理UnicodeEncodeError 处理UnicodeDecodeError 处理文本文件 字节问题 "字符串" ...
- python把文本转换为html_Python基础教程——把文本转为HTML格式
功能:将文本文件转换成html格式的文档. 方法: 1.添加初始标签 2.智能分段 #util.py def lines(file): #遍历文本文件,用生成器保存每行 for line in fil ...
- numpy序列预处理dna序列_使用机器学习和Python揭开DNA测序神秘面纱
"脱氧核糖核酸(DNA)是一种分子,其中包含每个物种独特的生物学指令.DNA及其包含的说明在繁殖过程中从成年生物传给其后代." 简介 基因组是生物体中DNA的完整集合.所有生物物种 ...
- numpy序列预处理dna序列_合成生物学快讯2019年第12期:基于DNA的分子数字数据存储...
本文由中国科学院上海生命科学信息中心 战略情报团队供稿 基于DNA的分子数字数据存储:现状与挑战 编者按:美国华盛顿大学和微软研究院的研究人员2019年8月在Nature杂志发文,对基于DNA的分子数 ...
- python文件处理,将DNA序列转换为RNA序列
1 #!/usr/bin/python 2 #-*- coding:utf-8 -*- 3 "将DNA序列转换为RNA序列,即将T转换为U即可,利用字符串的replace方法" 5 ...
最新文章
- cin、cout的重载
- RDKit | 基于Pytorch和RDKit建立QSAR模型
- 中科大提出统一输入过滤框架InFi:首次理论分析可过滤性,支持全数据模态
- Android 插件框架机制之Small
- JS刷新父窗口的几种方式
- 前端笔试能查吗_老码农的字节跳动前端面试总结
- 算法导论10-2.4题
- mysql8 设置了默认值 CURRENT_TIMESTAMP 依然报null问题
- 股票资金净流入和净流出
- oracle 查询clob
- C++ string类相关函数
- 利用电影直播赚钱的方法(几乎零成本、很多人不知道)
- 项目管理十大知识领域和47个过程
- joomla人人登录
- 实例展示:用css实现网页图片特效
- 微信小程序吸顶容器sticky
- PC端如何使用ITunes无线连接ios手机
- 微信小程序各门类需申请资质
- 中英文翻译功能 php,PHP微信开发之翻译功能
- firebird嵌入版数据使用