许多文件中序列的频率

时间:2017-07-01 12:01:07

标签: python python-2.7 biopython

假设您有50个文件(在同一个文件夹中),每个文件都包含字符“>”在搜索开始时。像例子一样:

File1.txt
>organism1
>organism2
>organism3
>organism4
>organism5

File2.txt
>organism3
>organism4
>organism5
>organism6

我的目的是计算每个文件中每个生物体的频率并生成一个表格。 目前,我逐个计算每个文件以生成表格:

Table 1.
          Frequency
organism1  1
organism2  1
organism3  2
organism4  2
organism5  2
organism6  1

到目前为止,我可以列出文件夹中的所有文件,但无法打开它们来制作我想要的文件。

    import sys
    from Bio import SeqIO
    import glob, os

    os.chdir(sys.argv[1])

    file_list = []

    for file in glob.glob("*.faa"):
            if file not in file_list:
                    file_list.append(file) # until here, perfect

for f in file_list:
        infile = open(f, 'r')
        fasta = SeqIO.parse(infile, 'fasta')
        seq = fasta.description  #.split("|")[2]
        print seq

问题是当我尝试在file_list中打开文件时。

<generator object parse at 0x7f76867c7a00>
<generator object parse at 0x7f76867c7a50>
<generator object parse at 0x7f76867c7a00>
<generator object parse at 0x7f76867c7a50>

1 个答案:

答案 0 :(得分:1)

您正在使用SeqIO.parse(),就好像它是SeqIO.read()一样无效。 SeqIO.parse()返回一个生成器,因为它从文件生成多个结果:

import sys
import glob
import os
from Bio import SeqIO

os.chdir(sys.argv[1])

file_list = []

for file in glob.glob("*.faa"):
    if file not in file_list:
        file_list.append(file)

for file_name in file_list:
    for fasta in SeqIO.parse(file_name, 'fasta'):
        description = fasta.description
        print(description)

这适用于我的环境,Python 3.6.0; Biopython 1.69。在我的环境中,您的代码会生成错误:

AttributeError: 'generator' object has no attribute 'description'

而不是产生任何输出。我看到你正在运行Python 2.7,但是哪个是Biopython?

为什么要从glob()的结果中过滤重复项?