【问题标题】:Protein sequence from uniprot protein id python来自 uniprot protein id python 的蛋白质序列
【发布时间】:2018-09-29 15:04:03
【问题描述】:

我想知道是否有办法从 uniprot 蛋白质 ID 中获取蛋白质序列。我确实检查了一些在线软件,但它们允许一次获取一个序列,但我有 5536 个 vlues。 biopython中是否有任何软件包可以做到这一点?

【问题讨论】:

    标签: python bioinformatics biopython


    【解决方案1】:

    uniprot 的所有序列都可以从“http://www.uniprot.org/uniprot/”+ UniprotID +.fasta 访问。您可以使用

    获得任何序列
    import requests as r
    from Bio import SeqIO
    from io import StringIO
    
    cID='P04637'
    
    baseUrl="http://www.uniprot.org/uniprot/"
    currentUrl=baseUrl+cID+".fasta"
    response = r.post(currentUrl)
    cData=''.join(response.text)
    
    Seq=StringIO(cData)
    pSeq=list(SeqIO.parse(Seq,'fasta'))
    

    cID 可以是一个列表或单个条目,如果您循环通过一个错误列表,只需在下载之间添加延迟,尽量不要使服务器饱和。希望对你有帮助

    【讨论】:

      【解决方案2】:

      在 Python 中从 UniProt 获取许多序列的最快和最简单的方法之一是使用 pyfaidx 包。它是一个简单但经过良好测试的工具,建立在 SAMtools 的著名算法之上。它也可被学术出版物引用。

      只需从 https://www.uniprot.org/downloads 下载包含所有序列(或仅选择的子集)的 fasta 文件,如果需要解压缩文件,安装 pyfadix(例如使用 pip install pyfaidx --user 或 bioconda)并使用 Fasta 构造函数加载序列:

      from pyfaidx import Fasta
      sequences = Fasta('uniprot_sprot.fasta')
      

      第一次加载可能需要一段时间,但之后所有操作都会非常快。现在sequences 是一个类似字典的对象,所以你可以访问你需要的条目:

      p53 = sequences['sp|P04637|P53_HUMAN']
      print(p53)
      

      显示顺序:

      MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLSPDDIEQWFTEDPGPDEAPRMPEAAPPVAPAPAAPTPAAPAPAPSWPLSSSVPSQKTYQGSYGFRLGFLHSGTAKSVTCTYSPALNKMFCQLAKTCPVQLWVDSTPPPGTRVRAMAIYKQSQHMTEVVRRCPHHERCSDSDGLAPPQHLIRVEGNLRVEYLDDRNTFRHSVVVPYEPPEVGSDCTTIHYNYMCNSSCMGGMNRRPILTIITLEDSSGNLLGRNSFEVRVCACPGRDRRTEEENLRKKGEPHHELPPGSTKRALPNNTSSSPQPKKKPLDGEYFTLQIRGRERFEMFRELNEALELKDAQAGKEPGGSRAHSSHLKSKKGQSTSRHKKLMFKTEGPDSD
      

      然而,这个序列对象不仅仅是一个字符串——它提供了许多方便的实用函数和属性(long_nameunpadded_len、带有 startendcomplement()reverse() 的切片等等 - 请参阅文档了解更多信息)。

      如果您想通过 UniprotID 而不是 fasta 文件中的完整标识符访问序列,请使用:

      def extract_id(header):
          return header.split('|')[1]
      
      sequences = Fasta('uniprot_sprot.fasta', key_function=extract_id)
      print(sequences['P04637'])
      

      附言。只有一个警告 - 注意基于 1 的索引。

      【讨论】:

        【解决方案3】:

        您可能可以迭代您的值列表,每次都从库中调用所需的方法。

        【讨论】:

        • 我不知道有任何图书馆。我还在寻找一个。这就是我发帖寻求帮助的原因。
        • 如果您可以向在线应用程序发出 HTTP/REST/SOAP 请求以获取有关某个特定项目所需的信息,您可以制作一个 Python 脚本来迭代您拥有的每个数据片段,发送它到那个端点。我不知道您的特定问题,但它们是 Web 应用程序,它们很可能通过接受一些 POST 或 GET 请求来工作。只需在迭代数据集时从 python 中创建它,然后存储结果。如果您对所讨论的应用程序有更多信息,我们可能会提供更多帮助。
        【解决方案4】:

        尝试下面的代码获取查询参数中提供的所有蛋白质序列

        import urllib,urllib2
        url = 'https://www.uniprot.org/uploadlists/'
        params = {
            'from':'ACC+ID',
            'to':'ACC',
            'format':'txt',
            'query':'P13368 P20806 Q9UM73 P97793 Q17192'
        }
        data = urllib.urlencode(params)
        request = urllib2.Request(url, data)
        contact = "" # contact email address debug
        request.add_header('User-Agent', 'Python %s' % contact)
        response = urllib2.urlopen(request)
        page = response.read()
        print page
        

        【讨论】:

          【解决方案5】:

          您可以从 SwissProt/UniProt 数据库中获取序列,也可以从 NCBI Entrez 服务器获取序列。从 NCBI Entrez 获取文件并读取序列的一种方法是 Python 包biotite

          >>> import biotite.database.entrez as entrez
          >>> import biotite.sequence as seq
          >>> import biotite.sequence.io.fasta as fasta
          >>> # Find UIDs for SwissProt/UniProt entries
          >>> query =   entrez.SimpleQuery("Avidin", "Protein Name") \
          ...         & entrez.SimpleQuery("Gallus gallus", "Organism") \
          ...         & entrez.SimpleQuery("srcdb_swiss-prot", "Properties")
          >>> print(query)
          ((Avidin[Protein Name]) AND ("Gallus gallus"[Organism])) AND (srcdb_swiss-prot[Properties])
          >>> uids = entrez.search(query, db_name="protein")
          >>> print(uids)
          ['158515411']
          >>> # Download FASTA file containing the sequence(s)
          >>> # from NCBI Entrez database
          >>> file_name = entrez.fetch_single_file(
          ...     uids, "avidin.fa", db_name="protein", ret_type="fasta"
          ... )
          >>> # Read file
          >>> fasta_file = fasta.FastaFile()
          >>> fasta_file.read(file_name)
          >>> print(fasta_file)
          >sp|P02701.3|AVID_CHICK RecName: Full=Avidin; Flags: Precursor
          MVHATSPLLLLLLLSLALVAPGLSARKCSLTGKWTNDLGSNMTIGAVNSRGEFTGTYITAVTATSNEIKE
          SPLHGTQNTINKRTQPTFGFTVNWKFSESTTVFTGQCFIDRNGKEVLKTMWLLRSSVNDIGDDWKATRVG
          INIFTRLRTQKE
          >>> # Convert first sequence in file to 'ProteinSequence' object
          >>> seq = fasta.get_sequence(fasta_file)
          >>> print(seq)
          MVHATSPLLLLLLLSLALVAPGLSARKCSLTGKWTNDLGSNMTIGAVNSRGEFTGTYITAVTATSNEIKESPLHGTQNTINKRTQPTFGFTVNWKFSESTTVFTGQCFIDRNGKEVLKTMWLLRSSVNDIGDDWKATRVGINIFTRLRTQKE
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-06-27
            • 2013-01-16
            • 1970-01-01
            • 2017-01-28
            • 1970-01-01
            • 2020-12-22
            • 2013-01-22
            相关资源
            最近更新 更多