许多文件中序列的频率

Frequency of sequences in many files

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

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

File2.txt
>organism3
>organism4
>organism5
>organism6

我的意图是统计每个文件中每个生物体的出现频率,生成一个table。 目前,我逐个文件计算每个文件以生成 table:

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>

您将 SeqIO.parse() 当作 SeqIO.read() 使用,但这是行不通的。 SeqIO.parse() returns 一个生成器,因为它从文件中生成多个结果:

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;生物蟒 1.69。在我的环境中,您的代码生成错误:

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

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

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