如何解决如何使用 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])
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 举报,一经查实,本站将立刻删除。