2016-04-06 4 views
1

Я пытаюсь написать функцию для подсчета количества каждой последовательности ID, что происходит в этом файле (это образец доменный файл)Создание словаря для подсчета количества вхождений идентификаторов Sequence

enter image description here

Картинка выше - это входной файл, с которым я имею дело.

def count_seq(input): 
    dic1={} 
    count=0 
    for line in input: 
     if line.startswith('#'): 
     continue 
    if line.find('hits found'): 
     line=line.split('\t') 
     if line[1] in dic1: 
      dic1[line]+=1 
     else: 
      dic1[line]=1 
return dic1 

Выше мой код, который при вызове просто возвращает пустые скобки {}

Так что я пытаюсь подсчитать, сколько раз каждый из идентификаторов последовательностей (второй элемент из последних 13 строк) происходит, например: FO203510.1 встречается 4 раза.

Любая помощь будет оценена очень, спасибо!

+0

Текст здесь намного предпочтительнее. Людям нравится копировать/вставлять и тестировать свои решения на ваших данных. – jDo

+0

О, хорошо, спасибо, что сообщили мне, я не думал об этом и не понимал, что это будет проблемой! – pythonbeginner2506

ответ

2

Может быть, это то, что вы после:

def count_seq(input_file): 
    dic1={} 
    with open(input_file, "r") as f: 
     for line in f: 
      line = line.strip() 
      if not line.startswith('#'): 
       line = line.split() 
       seq_id = line[1] 
       if not seq_id in dic1: 
        dic1[seq_id] = 1 
       else: 
        dic1[seq_id] += 1 

    return dic1 

print(count_seq("blast_file")) 
+0

Это то, что я пытался сделать, спасибо! Все еще получаю голову вокруг петель и словарей! – pythonbeginner2506

2

Это штуцера для collections.defaultdict. Пусть f является файловым объектом. Предполагая, что последовательности находятся во втором столбце, это всего лишь несколько строк кода, как показано.

from collections import defaultdict 
d = defaultdict(int) 
seqs = (line.split()[1] for line in f if not line.strip().startswith("#")) 
for seq in seqs: 
    d[seq] += 1 

Посмотрите, работает ли оно!