用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序列相关推荐

  1. [流畅的Python][4][文本和字节序列]

    第4章 文本和字节序列 人类使用文本,计算机使用字节序列.--------Esther Nam和Travis Fischer Python3明确地区分了人类可读的文本字符串和原始的字节序列 4.1 字 ...

  2. python单位转换编程_如何使用python编程将一组DNA序列转换为蛋白...

    我正在使用python创建一个程序,该程序将一组DNA序列转换为氨基酸(蛋白质)序列.然后,我需要找到一个特定的子序列,并计算存在该特定子序列的序列数.这是我到目前为止的代码: #Open cDNA_ ...

  3. 【python】文本转换为语音——pyttsx3模块的使用

    文本转换为语音(pyttsx3模块) pyttsx3模块 文本转换为语音(pyttsx3模块) 一.pyttsx3的概述 二.简单应用 三.一些实例 四.官方文档节选 一.pyttsx3的概述 pyt ...

  4. 用python把文本转换为数字

    可以使用 Python 的内置函数 int() 或 float() 将文本转换为数字.例如: text = "123" number = int(text) print(numbe ...

  5. Python中文本和字节序列的处理

    文本和字节序列 字节问题 字节概要 基本的编解码器 编码问题 处理UnicodeEncodeError 处理UnicodeDecodeError 处理文本文件 字节问题 "字符串" ...

  6. python把文本转换为html_Python基础教程——把文本转为HTML格式

    功能:将文本文件转换成html格式的文档. 方法: 1.添加初始标签 2.智能分段 #util.py def lines(file): #遍历文本文件,用生成器保存每行 for line in fil ...

  7. numpy序列预处理dna序列_使用机器学习和Python揭开DNA测序神秘面纱

    "脱氧核糖核酸(DNA)是一种分子,其中包含每个物种独特的生物学指令.DNA及其包含的说明在繁殖过程中从成年生物传给其后代." 简介 基因组是生物体中DNA的完整集合.所有生物物种 ...

  8. numpy序列预处理dna序列_合成生物学快讯2019年第12期:基于DNA的分子数字数据存储...

    本文由中国科学院上海生命科学信息中心 战略情报团队供稿 基于DNA的分子数字数据存储:现状与挑战 编者按:美国华盛顿大学和微软研究院的研究人员2019年8月在Nature杂志发文,对基于DNA的分子数 ...

  9. python文件处理,将DNA序列转换为RNA序列

    1 #!/usr/bin/python 2 #-*- coding:utf-8 -*- 3 "将DNA序列转换为RNA序列,即将T转换为U即可,利用字符串的replace方法" 5 ...

最新文章

  1. cin、cout的重载
  2. RDKit | 基于Pytorch和RDKit建立QSAR模型
  3. 中科大提出统一输入过滤框架InFi:首次理论分析可过滤性,支持全数据模态
  4. Android 插件框架机制之Small
  5. JS刷新父窗口的几种方式
  6. 前端笔试能查吗_老码农的字节跳动前端面试总结
  7. 算法导论10-2.4题
  8. mysql8 设置了默认值 CURRENT_TIMESTAMP 依然报null问题
  9. 股票资金净流入和净流出
  10. oracle 查询clob
  11. C++ string类相关函数
  12. 利用电影直播赚钱的方法(几乎零成本、很多人不知道)
  13. 项目管理十大知识领域和47个过程
  14. joomla人人登录
  15. 实例展示:用css实现网页图片特效
  16. 微信小程序吸顶容器sticky
  17. PC端如何使用ITunes无线连接ios手机
  18. 微信小程序各门类需申请资质
  19. 中英文翻译功能 php,PHP微信开发之翻译功能
  20. firebird嵌入版数据使用

热门文章

  1. python实现桌面自动化画图
  2. 【Cody】Introduction to MATLAB
  3. 7-23 编程打印空心字符菱形
  4. MySQL主从复制和基于Amoeba的读写分离部署
  5. 直方图实例详解(颜色直方图、灰度直方图)
  6. uva10054--欧拉回路--串珠子
  7. Spread.js 上下级关系
  8. 通过VBA在excel中实现股票当日走势数据查询表(完整代码截图在文章最后,完整的excel原件可以在我的资源中下载)
  9. 【Chrome插件开发作品】用户信息及验证码自动填充插件
  10. 预测结果展示-plt.pause()