Python如何输出某关键字符并输出完整字符串
我初学Python,想要写个计算氨基酸序列长度的Python脚本,自己写了一小段就遇到问题importrefileFa=open("SEQ.FASTA","r")#SEQ...
我初学Python,想要写个计算氨基酸序列长度的Python脚本,自己写了一小段 就遇到问题
import re
fileFa = open("SEQ.FASTA", "r") # SEQ.FASTA为氨基酸序列文件
countName = 0
for Seqline in fileFa.readlines(): #匹配每一行开头是>
reSeqname = re.findall(">", Seqline)
if len(reSeqname) > 0:
countName = countName + reSeqname.count(">")
print "共" + str(countName) + "条序列" #统计共有多少条序列
print "seqname\n" , reSeqname\n
fileFa.close()
现在这个小脚本可以统计出有 几条序列 但是我想输出序列的名字reSeqname就输出的是[ ] 然后我将第五行修改成reSeqname = re.findall(">(.+)", Seqline) 或者是reSeqname = re.findall(">([\w\W]*)", Seqline)脚本就无法运行 不能统计条数了
请大家帮忙修整 最好能解释说明 谢谢
下面是四条氨基酸序列
>qwe56_869
XFSHNYIFFVCVQQLQXSEHIPQKNSPLPFTFLLTKER
>qwe56_44606
KKERDIWTSXAHVTFAKERTQLAYTLRILVHITLSFEQLLEMEIGLAVGGAFLSSALNVLFDRLAPRGELLKMFQRGKHDV
>qwe56_44514
XFLSILKVFTKLTKEHQDMNVNDLAKIIREFISKGGKCLIVLDDVWEPNVVHAIKEAFPKNKKGHRIMITTRDASVARYANAHPHSLKFLKDEESFQ
>qwe56_44424
XITYTLRYILLLLCAETFLFLSHLIMAYAAITSLMNTIQQSMQ
还有个后续问题http://zhidao.baidu.com/question/1924164984543838947.html 也悬赏有分哦 展开
import re
fileFa = open("SEQ.FASTA", "r") # SEQ.FASTA为氨基酸序列文件
countName = 0
for Seqline in fileFa.readlines(): #匹配每一行开头是>
reSeqname = re.findall(">", Seqline)
if len(reSeqname) > 0:
countName = countName + reSeqname.count(">")
print "共" + str(countName) + "条序列" #统计共有多少条序列
print "seqname\n" , reSeqname\n
fileFa.close()
现在这个小脚本可以统计出有 几条序列 但是我想输出序列的名字reSeqname就输出的是[ ] 然后我将第五行修改成reSeqname = re.findall(">(.+)", Seqline) 或者是reSeqname = re.findall(">([\w\W]*)", Seqline)脚本就无法运行 不能统计条数了
请大家帮忙修整 最好能解释说明 谢谢
下面是四条氨基酸序列
>qwe56_869
XFSHNYIFFVCVQQLQXSEHIPQKNSPLPFTFLLTKER
>qwe56_44606
KKERDIWTSXAHVTFAKERTQLAYTLRILVHITLSFEQLLEMEIGLAVGGAFLSSALNVLFDRLAPRGELLKMFQRGKHDV
>qwe56_44514
XFLSILKVFTKLTKEHQDMNVNDLAKIIREFISKGGKCLIVLDDVWEPNVVHAIKEAFPKNKKGHRIMITTRDASVARYANAHPHSLKFLKDEESFQ
>qwe56_44424
XITYTLRYILLLLCAETFLFLSHLIMAYAAITSLMNTIQQSMQ
还有个后续问题http://zhidao.baidu.com/question/1924164984543838947.html 也悬赏有分哦 展开
展开全部
下边是实现的代码
# -*- coding: utf-8 -*-
fileFa = open("SEQ.FASTA", "r") # SEQ.FASTA为氨基酸序列文件
countName = 0
Seqlines = fileFa.readlines()
print u"共" + str(len(Seqlines)/2) + u"条序列" #统计共有多少条序列
for i in range (0,len(Seqlines)/2): #输出氨基酸序列名称
print Seqlines[2*i].strip('>\n'); #去掉">" 和 "换行"
fileFa.close()
解释:
首先你的氨基酸序列文件非常有规律的存放在SEQ.FASTA文件中,格式如下:
">"+氨基酸名称+换行+氨基酸序列+换行
使用fileFa.readlines()将会把文件中的记录全部读入到变量中,并且返回一个列表,列表的格式如下:
['>氨基酸名称\n', '氨基酸序列\n', '>qwe56_44606\n', '
KKERDIWTSXAHVTFAKERTQLAYTLRILVHITLSFEQLLEMEIGLAVGGAFLSSALNVLFDRLAPRGELLKMFQRGKHD
V\n']
所以,如果想获取氨基酸序列有多少条,只需要知道列表的长度后除以2即可。
而获取氨基酸序列名称,只需要输出序列中偶数的项即可。回答完毕,希望对您有所帮助。
追问
谢谢 但是一般来说序列名是一行 但是序列都不是一行的 那怎么把那些序列都放在一行呢 一般一个文件都有几万条序列 肯定不能手动
或者还请你帮忙看一下后续的问题http://zhidao.baidu.com/question/1924164984543838947.html
追答
楼上的方法就能解决你的问题,我就不多说什么了。
展开全部
如果存在序列占用多行的情况:
import itertools
def file2dict(filename):
name = ""
content = ""
dct = {}
for ln in itertools.ifilter(None, itertools.imap(
lambda s: s.strip(),
open(filename, 'rt')
)):
if ln.startswith(">"):
if content:
dct[name] = content
name, content = ln[1:], ""
else:
content += ln
dct[name] = content
return dct
datadict = file2dict("SEQ.FASTA")
print "Total %d serial." % len(datadict)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询