生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索

python 3.9实现以下算法。

1. 简单的写文件和读文件

# 写
file1 = open('count.txt','w')
file1.write('this is a test')
file1.close()

# 读
file2 = open('my_file')
print(file2.read())

2. 将列表内容写入文本文件

# 生成100-500数字列表
data = [i * 100 for i in range(1, 6)]
print(data)

context = []
for value in data:
    # 将内容追加至context列表
    context.append(str(value) + '\n')

# 写入文件
open('results.txt', 'w').writelines(out)

# 文件内容
# 100
# 200
# 300
# 400
# 500

3. 将NCBI Genbank文件转换为fasta文件

Genbank包含了所有已知的核酸和蛋白质序列,以及发表的期刊及生物学注释等信息。

AY810830.gb文件下载:
https://www.ncbi.nlm.nih.gov/nuccore/AY810830
下载.gb文件

genbank_file = open("AY810830.gb")
fasta_file = open("AY810830.fasta","w")

flag = False
# 遍历文件每行
for line in genbank_file:
    # 写入ACCESSION编号
    if line.startswith('ACCESSION'):
        accession = line.split()[1].strip()
        fasta_file.write('>' + accession + '\n')

    # 存在ORIGIN,则存在fasta序列
    if line.startswith('ORIGIN'):
        flag = True
    elif flag:
        fields = line.split()
        if fields != []:
            print(seq)
            # fasta序列
            seq = ''.join(fields[1:])
            fasta_file.write(seq.upper() + '\n')

genbank_file.close()
fasta_file.close()

4. 提取fasta序列header信息

fasta_file = open('AY810830.fasta','r')
out_file = open('AY810830.header','w')

for line in fasta_file:
    # > 开头为fasta序列header信息
    if line.startswith('>'):
        out_file.write(line)
        
out_file.close()

5. 转换RNA fasta序列为氨基酸序列

# 定义密码子表字典
codon_table = {
    'GCU':'A', 'GCC':'A', 'GCA':'A', 'GCG':'A', 'CGU':'R', 'CGC':'R',   
    'CGA':'R', 'CGG':'R', 'AGA':'R', 'AGG':'R', 'UCU':'S', 'UCC':'S',
    'UCA':'S', 'UCG':'S', 'AGU':'S', 'AGC':'S', 'AUU':'I', 'AUC':'I',
    'AUA':'I', 'UUA':'L', 'UUG':'L', 'CUU':'L', 'CUC':'L', 'CUA':'L',
    'CUG':'L', 'GGU':'G', 'GGC':'G', 'GGA':'G', 'GGG':'G', 'GUU':'V',
    'GUC':'V', 'GUA':'V', 'GUG':'V', 'ACU':'T', 'ACC':'T', 'ACA':'T',
    'ACG':'T', 'CCU':'P', 'CCC':'P', 'CCA':'P', 'CCG':'P', 'AAU':'N',
    'AAC':'N', 'GAU':'D', 'GAC':'D', 'UGU':'C', 'UGC':'C', 'CAA':'Q',
    'CAG':'Q', 'GAA':'E', 'GAG':'E', 'CAU':'H', 'CAC':'H', 'AAA':'K',
    'AAG':'K', 'UUU':'F', 'UUC':'F', 'UAU':'Y', 'UAC':'Y', 'AUG':'M',
    'UGG':'W',
    'UAG':'STOP', 'UGA':'STOP', 'UAA':'STOP'
    }

# 读取RNA fasta文件
rna = ''
for line in open('A06662-RNA.fasta'):
    # 过滤>开头行
    if not line.startswith('>'): 
        # 拼接序列并去除末尾\n
        rna = rna + line.strip()

# 三个不同阅读框,转换为蛋白序列
for frame in range(3):
    # 0,1,2
    protein_seq = '' 
    print('Reading frame ' + str(frame + 1))

    for i in range(frame, len(rna), 3):
        codon = rna[i:(i + 3)]
        
        if codon in codon_table:
            # 判断是否为终止密码子
            if codon_table[codon] == 'STOP':
                # *符号表示终止密码子
                protein_seq = protein_seq + '*'
            else: 
                # 不是终止密码子则添加转换后的氨基酸名称至protein_seq
                protein_seq = protein_seq + codon_table[codon]
        else:
            # 处理非密码子表里的RNA序列,以-符号表示
            protein_seq = protein_seq + '-' 	

    
    # 每行48个氨基酸打印protein_seq
    i = 0
    while i < len(protein_seq):
        print(protein_seq[i:i + 48])
        i = i + 48

在这里插入图片描述

6. 将fasta序列转换为字典

P62258氨基酸序列下载:
https://www.ncbi.nlm.nih.gov/protein/P62258
NCBI protein页面

sequences = {}
ac = ''
seq = ''

# 遍历fasta文件
for line in open("P62258.fasta"):
    # header信息保存至字典
    if line.startswith('>') and seq != '':
        sequences[ac] = seq
        seq = ''

    # >开头则获取蛋白序列编号, 否则添加氨基酸序列至seq变量
    if line.startswith('>'):
        ac = line.split('|')[1]
    else:
        seq = seq + line.strip()

sequences[ac] = seq

# 打印全部key
print(sequences.keys())

# 打印指定Key字典氨基酸序列
print(sequences['P62258.1'])

sequences['P62258.1']

7. 从pdb文件提取氨基酸序列

PDB数据库是一个数据中心,主要包含:原子坐标,蛋白质结构的其他信息和除蛋白以外生物大分子的信息。pdb文件可以从该数据下载。

牛β-胰蛋白酶 pdb文件下载:
https://www.rcsb.org/structure/1TLD
在这里插入图片描述

# 氨基酸简写字典
aa_codes = {
     'ALA':'A', 'CYS':'C', 'ASP':'D', 'GLU':'E',
     'PHE':'F', 'GLY':'G', 'HIS':'H', 'LYS':'K',
     'ILE':'I', 'LEU':'L', 'MET':'M', 'ASN':'N',
     'PRO':'P', 'GLN':'Q', 'ARG':'R', 'SER':'S',
     'THR':'T', 'VAL':'V', 'TYR':'Y', 'TRP':'W'}

seq = ''
# 遍历.pdb文件
for line in open("1tld.pdb"):
    # SEQRES开头行为氨基酸序列
    if line.startswith("SEQRES"):
        line_split = line.split()
        print(line_split)

        # 拼接氨基酸序列
        for aa_code in line_split[4:]:
            seq = seq + aa_codes[aa_code]

# 打印拼接结果, 每行63个氨基酸
i = 0
print(">1tld")
while i < len(seq):
    print(seq[i:(i + 64)])
    i = i + 64

pdb文件SEQRES:
pdb文件SEQRES
seq打印结果:
打印结果

生信算法文章推荐

生信算法1 - DNA测序算法实践之序列操作

生信算法2 - DNA测序算法实践之序列统计

生信算法3 - 基于k-mer算法获取序列比对索引

生信算法4 - 获取overlap序列索引和序列的算法

生信算法5 - 序列比对之全局比对算法

生信算法6 - 比对reads碱基数量统计及百分比统计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型,正在排队寻求“卖身”!请保持冷静!

AI独角兽卖身大潮&#xff0c;再添一员 就在上周&#xff0c;备受瞩目的明星企业Stability AI&#xff0c;这家估值接近300亿的大模型领域的佼佼者&#xff0c;**突然传出资金链断裂的严峻消息&#xff0c;并正积极寻求合并的可能性。**与此同时&#xff0c;媒体也透露&#x…

RetroMAE-文本embedding算法

1)输入文本经掩码操作后由编码器&#xff08;Encoder&#xff09;映射为隐空间中的语义向量&#xff1b;而后解码器&#xff08;Decoder&#xff09;借助语义向量将另一段独立掩码的输入文本还原为原始的输入文本 2)编码器的掩码率为15%-30%&#xff1b;解码器的掩码率为50%-70…

HMM地图匹配算法库Barefoot环境搭建

1.引入gps路径匹配开源项目barefoot 克隆仓库 git clone https://github.com/bmwcarit/barefoot.git打开项目执行mvn命令将项目打包到maven仓库 mvn install -DskipTests在自己的maven项目中引入barefoot依赖 <dependency><groupId>com.bmw-carit</groupId&g…

k8s 1.28.x 配置nfs

1.安装nfs&#xff0c;在每个节点上安装 yum install -y nfs-utils 2.创建共享目录(主节点上操作) mkdir -p /opt/nfs/k8s 3.编写NFS的共享配置 /opt/nfs/k8s *(rw,no_root_squash) #*代表对所有IP都开放此目录&#xff0c;rw是读写 4.启动nfs systemctl enable nfs-ser…

Flutter基础 -- Dart 语言 -- 进阶使用

目录 1. 泛型 generics 1.1 泛型使用 1.2 泛型函数 1.3 构造函数泛型 1.4 泛型限制 2. 异步 async 2.1 异步回调 then 2.2 异步等待 await 2.3 异步返回值 3. 生成器 generate &#xff08;了解&#xff09; 3.1 同步生成器 sync* 使用 sync* 的场景 总结 3.2 异…

CRM系统主要是干什么?CRM系统主要功能和作用

什么是CRM 系统&#xff1f;CRM系统到底是干什么的&#xff1f;不同的企业人员该如何利用CRM去解决他们的问题等等&#xff0c;问题太多了&#xff0c;今天来为大家详细介绍。 干货满满&#xff0c;建议收藏&#xff01;&#xff01; 首先第一个问题&#xff0c;什么是CRM系统…

Tween.js在Three.js中的应用:为3D动画添加流畅过渡

前言 在Web开发领域&#xff0c;Three.js已经成为构建精彩3D内容的首选库之一。它让开发者能够轻松地在浏览器中创建和展示复杂的3D场景。然而&#xff0c;要让这些场景栩栩如生&#xff0c;平滑的动画效果是必不可少的。这就引入了Tween.js——一个轻量级但功能强大的JavaScr…

MyBatis核心对象

MyBatis核心类对象主要有俩个&#xff1a; 1&#xff1a;对相关配置文件信息进行封装的Configuration对象 2&#xff1a;用来执行数据库操作的Executor对象。 核心对象----存储类对象Configuration Configuration对象主要有三个作用&#xff1a; 1&#xff1a;封装MyBatis…

linux进程加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

R语言数据分析-针对芬兰污染指数的分析与考察

1. 研究背景及意义 近年来&#xff0c;随着我国科技和经济高速发展&#xff0c;人们生活质量也随之显著提高。但是&#xff0c; 环境污染问题也日趋严重&#xff0c;给人们的生活质量和社会生产的各个方面都造成了许多不 利的影响。空气污染作为环境污染主要方面&#xff0c;更…

重生之我要精通JAVA--第七周笔记

文章目录 IO流字符流字符流原理解析flush和close方法 文件拷贝代码文件加密解密修改文件中的数据 缓冲流字节缓冲流字符缓冲流例题 转换流序列化流序列化流/对象操作输出流 反序列化流序列化流/反序列化流的细节汇总打印流字节打印流字符打印流 解压缩流压缩流Commons-io常见方…

代码随想录--哈希表--两数之和

题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 示例: 给定 nums [2, 7, 11, 15], t…

【RuoYi】如何解决Postman无法访问RuoYi中的接口数据

一、前言 最近&#xff0c;写项目要求需要将数据返回&#xff0c;指定的接口&#xff0c;并且需要使用Postman来测试接口数据&#xff0c;看是否能够请求到数据。然后项目用的是RuoYi的框架&#xff0c;RuoYi使用了SpringSecurity来做的安全框架&#xff0c;所以在访问的时候&a…

【C语言】编译与链接:深入理解程序构建过程

&#x1f525;引言 本篇将深入理解程序构建过程&#xff0c;以便于我们在编写程序的过程同时&#xff0c;理解底层是如何从程序的创建到生成可执行程序的。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专…

django使用fetch上传文件

在上一篇文章中&#xff0c;我包装了fetch方法&#xff0c;使其携带cookie。但是之前fetch传递的是json数据&#xff0c;现在有了一个上传文件的需求&#xff0c;因此需要进行修改&#xff1a; const sendRequest (url, method, data) > {const csrftoken Cookies.get(cs…

【Effective Python教程】(90个有效方法)笔记——第1章:培养pythonic思维——7:尽量用enumerate取代range

文章目录 第1章&#xff1a;培养pythonic思维第7条 尽量用enumerate取代range&#xff08;移位操作、位掩码&#xff09;要点enumerate函数可以用简洁的代码选代iterator&#xff0c;而且可以指出当前这轮循环的序号。不要先通过range指定下标的取值范围&#xff0c;然后用下标…

Linux eBPF:网络、系统监控和安全领域的创新

扩展 Berkeley Packet Filter&#xff08;eBPF&#xff09;是Linux内核中的一项强大技术&#xff0c;最初用于网络数据包过滤。随着时间的推移&#xff0c;eBPF的功能和应用场景不断扩展&#xff0c;如今已成为网络、系统监控和安全等领域的重要工具。eBPF可以在Linux内核中安全…

Halcon 双相机标定与拼图(一)

二、算子解释 get_calib_data camera-pose 获得基于第一个相机的第二个相机的Pose get_calib_data (CalibDataID, camera, 1, pose, RelPose2) *relative 相对 * To get the absolute pose of the second camera, its relative pose needs * to be inverted and combined…

2024 cicsn magicvm

文章目录 参考检查逆向vm::runvm::vmvm_alu::set_inputvm_mem::set_inputvm_id::runvm_alu::runvm_mem::run 漏洞思路参考的exp 参考 https://forum.butian.net/share/3048 https://akaieurus.github.io/2024/05/20/2024%E5%9B%BD%E8%B5%9B%E5%88%9D%E8%B5%9Bpwn-wp/#SuperHea…

【Nacos_bugs】java.lang.IllegalStateException: Failed to load ApplicationContext

报错原因 找不到配置文件。 Bug 排查 如果使用 Nacos 管理配置文件&#xff0c;需要检查本地 bootstrap.yml 配置是否出现问题&#xff1a; 检查点&#xff1a; 检查 Nacos 服务的地址有没有配置错误&#xff0c;如上图 ①&#xff0c;格式严格为 IP:端口号" 检查 D…