Извлечение количества с точной группой строк из длинной строки с символами

У меня есть этот файл с такими фрагментами:

      ## many comments here
 chrY    2893596 .       C       T       .       PASS    AC=1;AN=32183;AF=3.10723e-05;popmax=afr;strings1;strings2;strings2;strings3;etc;ENSG00000129824|strings|strings|strings|intron_variant|MODIFIER|HSFY3P|ENSG00000227289|Transcript|morestrings|etc||||||||||||||||||

chrY    2893598 .       A       G       .       PASS    AC=1;AN=32183;AF=3.10723e-05;popmax=afr;strings1;strings2;strings2;strings3;etc;ENSG00000129824|strings|strings|strings|upstream_gene_variant|MODIFIER|HSFY3P|ENSG00000227289|Transcript|morestrings|etc||||||||||||||||||

Дело в том, что столбец 8 состоит из ряда строк, заключенных либо в ";" или трубы.

Я пытаюсь написать код Python, учитывающий типы вариантов. В этом случае - нужно знать, сколько «upstream_gene_variant» и «intron_variant» есть для каждой строки, начиная с «ENSG». Количество целых чисел в каждой строке ENSG- 11.

Желаемый результат выглядит примерно так: Counter ({('ENSG00000227289', 'upstream_gene_variant'): 1,('00000227289', 'intron_variant'): 1}).

Я создал аналогичную проблему с другим типом файла здесь: Подсчет элементов в txt-файле с помощью словарей Python, но эти решения не работают с этим типом файла. Я получаю пустой Counter () с этим кодом:

      from collections import Counter
import re

PAT_ENSG = r'ENSG(?P<ensg>\d{11})'
PAT_VARIANT = r'(?P<variant>intron_variant|upstream_gene_variant)'

PATTERN = re.compile(fr'{PAT_ENSG}.*\b{PAT_VARIANT}\b')

with open('data.txt') as fp:
    ensg = []
    for line in fp:
        sre = PATTERN.search(line)
        if not line.startswith('#') and sre:
            ensg.append(sre.groups())
    count = Counter(ensg)

Затем я начал писать новый код:

      import os
from collections import Counter
import re


files = os.listdir("./")
for file in files:
    if file.endswith('gnomad_fragment.txt'):
        with open(file) as doc:
            data = doc.read()

            occurrences = data.count("ENSG")

        print('Number of occurrences of the word :', occurrences)

До этого работает нормально.

Количество вхождений слова: 10

Не знаете, как можно изменить этот сценарий словаря? Или мне лучше написать что-нибудь новое? Что еще можно использовать кроме словарей? Также для меня как ученика было бы здорово протестировать другое решение, а не только словарь.

Спасибо!

0 ответов

Другие вопросы по тегам