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 也悬赏有分哦
展开
 我来答
百度网友1ae4cb55f
推荐于2017-10-12 · TA获得超过158个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:98.3万
展开全部

下边是实现的代码

# -*- 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
追答
楼上的方法就能解决你的问题,我就不多说什么了。
匿名用户
2014-04-02
展开全部

python 3语法 如果你的python版本太老,可能不支持with语法、print函数,自己改下

 

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tim_spac
2014-03-30 · TA获得超过3628个赞
知道大有可为答主
回答量:1804
采纳率:100%
帮助的人:2013万
展开全部

如果存在序列占用多行的情况:

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)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式