许多文件中的序列频率

2024-03-29 08:27:22 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您有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

问题是当我试图打开文件列表中的文件时。你知道吗

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

Tags: 文件inimport文件夹objectparsegeneratorglob
1条回答
网友
1楼 · 发布于 2024-03-29 08:27:22

你在使用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)

这适用于我的环境python3.6.0;biopython1.69。在我的环境中,您的代码生成错误:

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

而不是产生任何产出。我知道你在运行Python2.7,但哪个是Biopython?你知道吗

为什么要从glob()的结果中筛选重复项?你知道吗

相关问题 更多 >