使用Python删除重复的蛋白质序列

时间:2015-05-07 19:48:42

标签: python sequence biopython

我正在尝试编写一个脚本来从包含七个单独Genbank条目的文件中删除重复的氨基酸序列(一旦工作,我想将脚本应用于包含1000-5000个条目的文件)。

这是数据......

WP_013250615.1
Candidatus Nitrospira defluvii
Seq('MKHVVDIELAGRRLTLETGRIAKQADGAIWATYGDTVVLATAVASQNAKPGVDF...PAG', IUPACProtein())
705
WP_014960802.1
Leptospirillum ferriphilum
Seq('MNPIFVEAVVGGKTVRLETGRMAKQADGSVVVWADGTVVIATAVASKVSKPGVD...SGR', IUPACProtein())
713
WP_036083494.1
Leptospirillum ferriphilum
Seq('MNPIFVEAVVGGKTVRLETGRMAKQADGSVVVWADGTVVIATAVASKVSKPGVD...SGR', IUPACProtein())
713
WP_014449743.1
Leptospirillum ferrooxidans
Seq('MNPIIVNVSVGGKNIRLETGRMAKLAGGSATVWADGTVVLATAVSAKSMKPGID...GGQ', IUPACProtein())
710
WP_023525658.1
Leptospirillum sp. Group II 'C75'
Seq('MNPIFVEAVVGGKTVRLETGRMAKQADGSVVVWADGTVVIATAVASKVSKPGVD...SGR', IUPACProtein())
713
WP_028844965.1
Thermodesulfovibrio thiophilus
Seq('MEVELNIKGQNLSLQTGIIARQTDGSVLVKYGDTYVLCTVVAEKTPKEGLDFIP...TKK', IUPACProtein())
710
YP_002249618.1
Thermodesulfovibrio yellowstonii DSM 11347
Seq('MEVELEIKGKKLVLQTGIFAKQTNGSVLAKYGDTYVLCTVVAEKTPKEGLDFVP...TKT', IUPACProtein())
710

其中一个条目是重复的( Leptospirillum ferriphilum 的物种和序列都相同)。我想迭代地浏览文件,只保留对于物种名称和序列都是唯一的条目(我期望较大的文件将具有相同序列但来自不同物种的条目,我想保留)。删除重复后,我需要将Genbank文件转换为fasta格式。

我可以使用SeqIO.parse命令提取数据,但到目前为止还无法删除重复项(我已尝试过set()命令)。当我检查输出文件时,我仍然有7个条目而不是6个。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您希望浏览每个条目,并将它们放入字典中,将种类名称映射到列表中,例如

species_dict = {}
for p in proteins:
    grab the species name
    grab the sequence
    if not species name in species_dict:
        species_dict[species name] = [sequence]
    else:
        if not sequence in species_dict[species name]:
            species_dict[species name].append(sequence)

按正则表达式'.*\d{10,10}\.\d{1,1}\s*(?P<sequence_name>\w+)'抓取物种名称,按'Seq('(?P<sequence>\w+)'

抓取序列

答案 1 :(得分:0)

这应该可以完成工作。它遍历原始列表,将每一行放入一个列表中,然后删除带有set的重复项,最后迭代新列表,没有重复项到新文件。

sequences = []
with open('file.txt', 'r') as f:
    for line in f:
        sequences.append(line)
new_list = list(set(sequences))
with open('new_file.txt', 'w') as f:
    for seq in new_list:
        f.write(seq)