Python如何输出某关键字符并输出完整字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python如何输出某关键字符并输出完整字符串相关的知识,希望对你有一定的参考价值。

我初学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 也悬赏有分哦

下边是实现的代码

# -*- 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

追答

楼上的方法就能解决你的问题,我就不多说什么了。

参考技术A

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

 

参考技术B

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

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)

python如何打印输出

参考技术A 使用print函数。
print(*objects,sep='',end='\n',file=sys.stdout, flush=False)
objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。

sep -- 用来间隔多个对象,默认值是一个空格。

end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。

file -- 要写入的文件对象。

flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

以上是关于Python如何输出某关键字符并输出完整字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7 mediainfo --inform 输出完整信息而不是一个字符串

求Python程序,将固定文本文件中的文本按某字符串分开,输出几个新的文本文件

Java 如何使用输入流和输出流 将txt文件中的某一行数据删除?

python如何让给定字符串“abcdefg”中的3个字符变成大写并输出所有的可能?

Excel公式 查找字符串中的关键字并输出对应值

python——字符串截取