生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索
创作时间:
作者:
@小白创作中心
生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索
引用
CSDN
1.
https://blog.csdn.net/LittleComputerRobot/article/details/139402794
生物信息学(Bioinformatics)是生物学与计算机科学的交叉学科,主要研究如何使用计算机算法和软件工具来分析和解释生物数据。Python作为一种功能强大且易于学习的编程语言,在生物信息学领域得到了广泛应用。本文将介绍一些常用的生物信息学算法,包括如何读写和检索核酸序列(Fasta格式)和蛋白质结构(PDB格式)文件。
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
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
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'])
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:
seq打印结果:
热门推荐
世界亚军0-3惨败!女单8强诞生4席:王艺迪剃光头,激战早田希娜
青海卫生健康系统雷锋月无偿献血活动:热血绘就“健康青海”
夏季宝藏级别的中成药——藿香正气水,这几种妙用你一定要知道!
孕妇禁止吃什么食物
鸡蛋饼热量:从食材到健康影响的全面解析
颗粒捕捉器的工作原理与堵塞处理方法
B2驾驶证准驾车型全解析:从重型货车到专项作业车
Arduino UNO和Mega2560引脚详细说明
老话说“二月怕十七”,明日二月十七,究竟怕啥?听老人怎么说
To Say the Least 的含义与用法
To Say the Least 的含义与用法
油性皮肤可以用硫磺皂洗脸吗
如何选择标签纸?
波轮与滚筒洗衣机:深入解析两者的差异与选择
考公务员考哪些科目
夏侯惇:战场上的猛将,功绩的真实性探究
战场的创伤:夏侯惇的眼睛之痛
零基础学习微分和导数
破纪录的疯狂三分,NBA历史上的三分狂潮与现代英雄
想买车,日产、本田、丰田和马自达,谁质量更好?看专业分析
【辣味菜的做法】好吃又辣的家常菜做法 香辣酸辣麻辣各种做法应有尽有
回医学中的膏方疗法的有效应技巧的实验验证
LED照明技术革新与发展趋势探讨
呋塞米注射液如何用量可以有效
乳铁蛋白结合有机铁 长者温和补铁新方案
关键绩效指标的有效管理提升企业绩效
【涨知识】违约金相关的税收知识,你知道吗?
如何利用生成式AI提高科研效率?(附ChatGPT提示词)
什么是PBL教学法?在教学中应该怎么用?
业界首个:XtalNet 深度学习模型从 PXRD 实验数据直接预测晶体结构