许多文件中序列的频率
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()
的结果中过滤重复项?
假设您有 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()
的结果中过滤重复项?