我正在寻找一个python解决方案,根据与单独文件中的头ID列表的匹配,将多个序列从FASTA文件提取到多个文件。在
这是发布在Extract sequences from a FASTA file based on entries in a separate file和{a2}上的问题的稍微复杂的版本,它们只为所有匹配项输出一个文件。
CAP357_2030_09WPI、CAP357_2040_11WPI、CAP357_2050_13WPI等。。。在
>;CAP357 U 2030 U 009wpi U v1v3_056_00002 U 000.4
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaaggg
>;CAP357_2040_011wpi_v1v3_008_00006_001.1
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
>;CAP357_2040_011wpi_v1v3_030_00002_000.4
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
>;CAP357_2040_011wpi_v1v3_004_00001_000.2
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
>;CAP357_2050_013wpi_v1v3_047_00002_000.4
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
文件1:CAP357_2030_009wpi_v1v3.fasta
>;CAP357_2030_009wpi_v1v3_056_00002_000.4
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaaggg
文件2:CAP357_2040_011wpi_v1v3.fasta
>;CAP357_2040_011wpi_v1v3_008_00006_001.1
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
>;CAP357_2040_011wpi_v1v3_030_00002_000.4
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
>;CAP357_2040_011wpi_v1v3_004_00001_000.2
gtaaaattaaccacctgtgtcactctaaattgtacactgcaaagggt
等。。。在
这个代码来自上面的链接,但是我想要:
*写入单独外文件的匹配项
*如果可能,我不必单独指定每个输出文件(我最多有30个输出文件)
#!/usr/bin/env python
import sys
from Bio import SeqIO
input_file = sys.argv[1]
id_file = sys.argv[2]
output_file = sys.argv[3]
wanted = set(line.rstrip("\n").split(None,1)[0] for line in open(id_file))
print "Found %i unique identifiers in %s" % (len(wanted), id_file)
index = SeqIO.index(input_file, "fasta")
records = (index[r] for r in wanted)
count = SeqIO.write(records, output_file, "fasta")
assert count == len(wanted)
print "Saved %i records from %s to %s" % (count, input_file, output_file)
到目前为止,我已经想出了(下面的脚本),但是不知道如何手动指定所有的outfiles和变量(我在这里只包含了三个)
^{pr2}$
一些简短的建议:
如果所有标题都遵循相同的模式,则可以提取唯一的元素:
(从“CAP357_2040_011wpi_v1v3_1_008_00006_001.1”得到“2040”)
如果使用dict,则可以收集记录集合:
^{pr2}$然后,您可以将每个集合写入一个新文件:
为了完整起见,以下是“最终”脚本:
相关问题 更多 >
编程相关推荐