当前位置: 首页 > 知识库问答 >
问题:

如何在python中读取fasta文件?

洪飞鸿
2023-03-14

我试图读取一个FASTA文件,然后找到特定的motif(字符串)并打印出它出现的顺序和次数。FASTA文件只是以标题行开始的一系列序列(字符串),标题或新序列开始的签名是“”

属性错误:“str”对象没有属性“下一个”

我不确定这是怎么回事。

import re

header=""
counts=0
newline=""

f1=open('fpprotein_fasta(2).txt','r')
f2=open('motifs.xls','w')
for line in f1:
    if line.startswith('>'):
        header=line
        #print header
        nextline=line.next()
        for i in nextline:
            motif="ML[A-Z][A-Z][IV]R"
            if re.findall(motif,nextline):
                counts+=1
                #print (header+'\t'+counts+'\t'+motif+'\n')
        fout.write(header+'\t'+counts+'\t'+motif+'\n')

f1.close()
f2.close()

共有3个答案

邴俊民
2023-03-14

我不确定意大利面的东西,但我非常确定你在这里做错了:

nextline=line.next()

行只是一个str,所以不能调用str.next()

另外,关于文件,建议您使用:

with open('fpprotein_fasta(2).txt','r') as f1:

这将处理自动关闭文件。

我们鼓励您提供一个示例 fasta 文件,以便我可以尝试更正代码。

东方栋
2023-03-14

这可能有助于您朝着正确的方向前进

import re

def parse(fasta, outfile):
    motif = "ML[A-Z][A-Z][IV]R"
    header = None
    with open(fasta, 'r') as fin, open(outfile, 'w') as fout:
            for line in fin:
                if line.startswith('>'):
                    if header is not None:
                        fout.write(header + '\t' + str(count) + '\t' + motif + '\n')
                    header = line
                    count = 0
                else:
                    matches = re.findall(motif, line)
                    count += len(matches)
            if header is not None:
                fout.write(header + '\t' + str(count) + '\t' + motif + '\n')
if __name__ == '__main__':
    parse("fpprotein_fasta(2).txt", "motifs.xls")
史绍晖
2023-03-14

错误可能来自以下行:

nextline=line.next()

line是您已经阅读过的字符串,上面没有next()方法。

部分问题在于,您尝试混合两种不同的读取文件的方式 - 您正在迭代使用f1中的for行

此外,如果您正在处理FASTA文件,我推荐使用Biopython:它使得处理序列集合更加容易。尤其是第14章的主题会让你特别感兴趣。这可能需要你学习更多关于Python的知识来达到你的目的,但是如果你要做的生物信息学工作比你在这里的例子所展示的要多得多,那么投入时间绝对是值得的。

 类似资料:
  • 问题内容: 在史前时代(Python 1.4)中,我们做到了: 在Python 2.1之后,我们做到了: 在Python 2.3中获得便利的迭代器协议之前,它可以做到: 我看过一些使用更详细的示例: 这是首选的方法吗? [edit]我知道with语句可以确保关闭文件…但是为什么文件对象的迭代器协议中没有包含该语句呢? 问题答案: 偏爱以下原因的确有一个原因: 我们都为CPython的相对确定性的引

  • 问题内容: 我有以下序列,这些序列是带有序列标头及其核苷酸的fasta格式。如何随机提取序列。例如,我想从总序列中随机选择2个序列。提供的工具可以根据百分比而不是序列数进行提取。谁能帮我? 快餐 预期产量 问题答案: 如果您正在使用FASTA文件时使用BioPython,获得序列使用random.sample: 输出: 您可以根据需要提取字符串: 如果行始终成对出现,并且您跳过了顶部的元数据,则可

  • 问题内容: 我需要一次最多读取N行来读取一个大文件,直到EOF。在Python中最有效的方法是什么?就像是: 问题答案: 一种解决方案是列表理解和分片运算符: 在这之后是行的元组。但是,这会将整个文件加载到内存中。如果您不希望这样做(即文件可能真的很大),则可以使用生成器表达式和itertools包中的另一种解决方案: 是一个生成器对象,它为您提供文件的每一行,并且可以在这样的循环中使用: 两种解

  • 问题内容: 是否可以用Python读取二进制MATLAB .mat文件? 我已经看到SciPy声称支持读取.mat文件,但是我没有成功。我安装了SciPy 0.7.0版,但找不到该方法。 问题答案: 需要导入,…

  • 问题内容: 是否可以在AngularJS中读取文件?我想将文件放入HTML5画布进行裁剪。 我在考虑使用指令吗?这是我要放入指令中的javascript代码: 问题答案: 是的,指令是正确的方法,但看起来有些不同: 工作示例:http : //plnkr.co/edit/y5n16v?p=preview 感谢lalalalalmbda提供此链接。

  • 问题内容: 我在python中将selenium与webdriver一起使用,以从站点下载csv文件。该文件将下载到指定的下载目录中。这是我的代码的概述 我需要将此csv的内容发送到终端。许多具有随机名称的相似文件将被下载到同一文件夹中,因此无法通过文件名访问文件,因为我不知道它将是什么提前 问题答案: 这个答案是由以前的堆栈溢出问题,答案以及本文中的注释组成的,所以谢谢大家。 我为这个解决方案结