假设您有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>
答案 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()
的结果中过滤重复项?