2015-05-07 2 views
-2

Я пытаюсь написать сценарий для удаления повторяющихся аминокислотных последовательностей из файла, содержащего семь отдельных записей Genbank (после работы я хочу применить сценарий к файлам, содержащим записи 1000-5000).Использование Python для удаления повторяющихся последовательностей белка

Вот данные ...

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.

Любые идеи?

+1

Не получайте downvotes :) Всегда ли есть 10-точечная 1-значная цифра 014960802.1 для каждой записи? – codyc4321

+0

Вы можете прочитать их в словаре, с именем вида, как 'key', таким образом вы могли бы избежать дублирования названия вида. Для случаев, когда имя вида одинаково, вы можете очень легко проверить, имеют ли они один и тот же seq, используя глобальное или локальное выравнивание. Я бы обескураживал использование совпадения строк, поскольку он не был бы точным – letsc

+0

На самом деле, похоже, он выделяет белки, и у них вполне может быть несколько уникальных последовательностей для одного и того же вида – codyc4321

ответ

0

Это должно быть выполнено. Он выполняет итерацию через исходный список, помещает каждую строку в список, затем удаляет дубликаты с набором и, наконец, повторяет новый список без дубликатов нового файла.

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) 
+0

, а как же случаи, когда виды одинаковы и seq отличается? – letsc

+1

_ (Я ожидаю, что в больших файлах будут записи с одинаковыми последовательностями, но из разных видов, которые я хочу сохранить) _ set удалит такие случаи. И держите свой язык под контролем – letsc

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) 

Grab название вида путем регулярных выражений '.*\d{10,10}\.\d{1,1}\s*(?P<sequence_name>\w+)' и последовательности, 'Seq('(?P<sequence>\w+)'

Смежные вопросы