微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 biopython 中的 Seq.IO 解析 fasta 字符串

如何解决如何使用 biopython 中的 Seq.IO 解析 fasta 字符串

我需要使用 fasta 字符串而不是 fasta 文件python3 中的 Seq.IO 中解析它

from Bio import SeqIO

fasta_string = '>name\nACCTGTGGCTGCTTGCTTGCTTGGGCT'

rec = SeqIO.parse(fasta_string,"fasta")

print (rec[0])

我读到我需要使用 io 模块创建一个文件对象

import io

with io.StringIO() as f:
    f.write('abcdef')
    print('gh',file=f)
    f.seek(0)
    print(f.read())

但是 Seq.IO 需要一个文件路径,不仅是目标文件,而且我不能写一个临时文件

有什么想法吗?

提前致谢。

解决方法

我不太明白你的问题,

无论如何:

from Bio import SeqIO

fasta_string = '>name\nACCTGTGGCTGCTTGCTTGCTTGGGCT'

rec = SeqIO.parse(fasta_string,"fasta")

print (rec[0])

给出错误:

FileNotFoundError: [Errno 2] No such file or directory: '>name\nACCTGTGGCTGCTTGCTTGCTTGGGCT'

所以要使用 BioPython 将您的序列写入 fasta 文件

我可以使用:

from Bio import SeqIO

from Bio.Seq import Seq

from Bio.SeqRecord import SeqRecord
fasta_string = '>name\nACCTGTGGCTGCTTGCTTGCTTGGGCT'

fasta_string_name,fasta_string_seq = fasta_string.strip('>').split('\n')

print(fasta_string_name,fasta_string_seq,'\n\n') # this one just to check the values


# SeqRecord object see https://biopython.org/wiki/SeqRecord
rec = SeqRecord(
    Seq(fasta_string_seq),id='',name='',description=fasta_string_name)


print('SeqRecord object : ',rec,sep='\n') # this one just to check the SeqRecord object 

recordz =[rec]  #this one not necessary but if you have more rec
                #I believe you need them into a list for SeqIO to write them out check it


SeqIO.write(recordz,"example.fasta","fasta") #this one write out your string as fasta file

写入脚本路径的example.fasta文件为:

> name
ACCTGTGGCTGCTTGCTTGCTTGGGCT

再次不确定这是否是您要完成的任务,请告诉我。

,

好吧,我想我是从这里得到的:

Biopython parse from variable instead of file on SO

@dataclass
class BanditParameters(DefaultBanditParameters):
    """
    A class object that retrieves the most recent model parameters or default if can't find any
    and returns class object.
    """
    
    def _update(self,new):
        for key,value in new.items():
            if hasattr(self,key):
                setattr(self,key,value)

    def update(self,bucket,session,input_dir):
        """
        Retrieves latest updates from S3 directory and updates model parameters if any,otherwise uses default
        @param bucket: S3 bucket
        @param session: AWS session object
        @param input_dir: S3 key for model parameters
        @return: class object containing model parameters
        """
        s3 = session.resource('s3')

        try:
            key = [obj.key for obj in s3.Bucket(bucket).objects.filter(Prefix=input_dir)][-1]
            file_content = s3.Object(bucket,key).get()['Body'].read().decode('utf-8')
            logger.info("Latest parameters found in directory.")
            params = json.loads(file_content)
            params_dict = {
                'model': params["model"],'training_time': params["timestamp"],'arms': params["arms"],'n': params["total_events"],'mean_reward': params["mean_reward"]
            }
            self._update(params_dict)
            return self
        except:
            logger.warning("No parameters found in directory. Using default...")
            return self

    @classmethod
    def get_default_params(cls):
        """Returns the default model parameters"""
        return DefaultBanditParameters()

输出:

from io import StringIO
from Bio import SeqIO

# fasta_string = '>name\nACCTGTGGCTGCTTGCTTGCTTGGGCT'

fasta_string = '>name\nACCTGTGGCTGCTTGCTTGCTTGGGCT\n>name2\nCCCCCCCCCGGGGGGGGGGGTTTTTTTAAA'

fasta_io = StringIO(fasta_string) 

records = SeqIO.parse(fasta_io,"fasta") 

for rec in records:
    print(rec)

fasta_io.close() 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。