从字符串中或文件中获取序列信息

本文介绍了一种从Fasta格式字符串中高效提取生物序列的方法,包括去除空格、转换为大写及序列文件的整合。此外,还展示了如何从大型序列文件中逐条读取序列,适用于生物信息学研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#从长度不是特别长的fasta_string中获取序列,去除序列中的空格并全部转为大写,序列以(序列名,序列)的形式,保存到列表中
def get_sequences_from_fasta_string(fasta_string):
assert isinstance(fasta_string,str)
sequences=[]
for item in fasta_string.split('>')[1:]:
seq_name=item.split('\n')[0]
seq=''.join(''.join(item.split('\n')[1:]).split()).upper()
sequences.append((seq_name,seq))
return sequences

# 将一个文件夹内的序列文件提取生成到一个fasta文件里
import glob
extend_names=['txt','seq','fasta']
s=''
for extend_name in extend_names:
for filename in glob.glob(r'c:\users\seln\desktop\sequences\*.{}'.format(extend_name)):
with open(filename,'r')as f:
seq=''.join(list(filter(lambda char:char.isalpha(),
f.read())))
s+=">%s\n%s\n" % (filename.split('\\')[-1],seq)


#利用生成器,从序列数非常巨大的文件里读取序列
def get_items_from_file(filename,testfun=None):
with open(filename) as file:
return get_items(file,testfun)

def get_items(src,testfun=None):
return [item for item in item_generator(src) if not testfun or testfun(item)]

def item_generator(src):
skip_intro(src)
des=[]
seq=''
for line in src:
if line[0]=='>':
if des:
yield des,seq
des=line[1:-1].split('|')
seq=''
else:
seq+=line[:-1]
yield des,seq

def skip_intro(src):
line=src.readline()
while line[0]!='A':
line=src.readline()

def find_item_in_file(filename,testfun=None):
with open(filename)as file:
return find_item(file,testfun)

def find_item(src,testfun=None):
gen=item_generator(src) #生成器函数一定要赋给一个变量后使用!!!
item=next(gen)
if not testfun:
return item
else:
try:
while not testfun(item):
item=next(gen)
return item

转载于:https://www.cnblogs.com/liaoxuewen/p/10384769.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值