热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何有效地读取大型XML文件并创建自定义对象?(BiopythonSeqIO)

我正在编写一个程序,该程序从UniProt提取一个充满蛋白质序列的大型XML文件,并

我正在编写一个程序,该程序从UniProt提取一个充满蛋白质序列的大型XML文件,并对它们进行分析。我已经有一个工作版本,但是是用于较小的文件。现在,我需要高效地加载完整的UniProt数据库,并且不确定如何进行操作。我还想从创建的SeqRecord对象中提取特定的属性,所以只有我感兴趣的数据。我有以下内容:

import gzip
from Bio import SeqIO
file = "/Users/john/workspace/project-2/resources/uniprot_sprot_small.xml.gz"
def load_uniprot_records():
records = []
handle = gzip.open(file)
for record in SeqIO.parse(handle,"uniprot-xml"):
records.append(record)
print(record)
if __name__ == "__main__":
load_uniprot_records()

这将显示一些类似于以下的记录:

ID: Q6GZX4
Name: 001R_FRG3G
Description: Putative transcription factor 001R
Database cross-references: DOI:10.1016/j.virol.2004.02.019,EMBL:AY548484,GO:GO:0046782,GeneID:2947773,InterPro:IPR007031,KEGG:vg:2947773,NCBI Taxonomy:654924,Pfam:PF04947,Proteomes:UP000008770,PubMed:15165820,RefSeq:YP_031579.1,Swiss-Prot:001R_FRG3G,Swiss-Prot:Q6GZX4,Swisspalm:Q6GZX4
Number of features: 2
/dataset=Swiss-Prot
/created=2011-06-28
/modified=2019-06-05
/version=37
/accessiOns=['Q6GZX4']
/recommendedName_fullName=['Putative transcription factor 001R']
/gene_name_ORF=['FV3-001R']
/taxOnomy=['Viruses','Iridoviridae','Alphairidovirinae','Ranavirus']
/organism=Frog virus 3 (isolate Goorha) (FV-3)
/organism_host=['Ambystoma','mole salamanders','Dryophytes versicolor','chameleon treefrog','lithobates pipiens','Northern leopard frog','Rana pipiens','Notophthalmus viridescens','Eastern newt','Triturus viridescens','Rana sylvatica','Wood frog']
/references=[Reference(title='Comparative genomic analyses of frog virus 3,type species of the genus Ranavirus (family Iridoviridae).',...)]
/comment_function=['Transcription activation.']
/proteinExistence=['predicted']
/keywords=['activator','Complete proteome','Reference proteome','Transcription','Transcription regulation']
/type=['ECO:0000305']
/key=['1']
/sequence_length=256
/sequence_mass=29735
/sequence_checksum=B4840739BF7D4121
/sequence_modified=2004-07-19
/sequence_version=1
Seq('MAFSAEDVLKEYDRRRRMEALLLSLYYPNDRKLLDYKEWSPPRVQVECPKAPVE...TPL',ProteinAlphabet())

我想实现一个高效的功能,以仅将每个记录中所需的属性存储在UniProt文件中,该文件大量。

例如,在上述蛋白质中,我希望将ID作为主要标识符,并带有相应的标识符(因为我正在使用该词,所以有人告诉我应该为此创建字典吗?){ {1}},Nametaxonomy。但是,我不确定是否可以创建新的对象数据集,是否仍可以将其视为sequence_length对象?

我已经阅读了SeqRecord类文档,但是并没有涵盖我要尝试做的事情,因此我只需要一点指导。很抱歉,如果很明显,仍然可以绕开我的脑袋!

编辑:
现在已经

SeqRecord

但是,不知道如何仅访问注释字典的分类法部分。使用def load_uniprot_records():
file = "/Users/john/workspace/practical-2/resources/uniprot_sprot_small.xml.gz"
seq_records = []
handle = gzip.open(file)
for record in SeqIO.parse(handle,"uniprot-xml"):
seq_record = SeqRecord(seq=record.seq,id=record.id,name=record.name,description=record.description,annotatiOns=record.annotations)
seq_records.append(seq_record)
return seq_records
只需分配每个注释,而我只需要其中一个或两个(分类法,sequence_length)。有什么想法吗?


是的,SeqRecords是非常完整的序列表示形式,但是效率不高。对于您而言,最有效的数据结构可能是一个简单的字典,其中ID是键,值是具有固定位置(name,taxonomy,seq_length)的元组(您也可以为此使用namedtuple我相信他们的表现略差)。然后,您甚至不需要存储SeqRecord,只需提取相关信息然后丢弃它即可:

seq_records = {} # keys remain ordered since Python 3.7 :)
for record in SeqIO.parse(handle,"uniprot-xml"):
name = record.name
description = record.description
seq_length = len(record)
seq_records[record.id] = (name,description,seq_length)

(我不记得确切的属性名称,可以使用dir(record)或here来获得它们,但是您知道了。)这将在以后实现非常有效的数据处理。您还需要对文件进行有效的解析吗?除了使用SeqIO以外,还有其他更快的方法,例如ElementTree(How do I parse XML in Python?),但是除非是时间紧迫的步骤,否则我不会打扰。


推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
书苑幽香
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有