Извлечение количества с точной группой строк из длинной строки с символами
У меня есть этот файл с такими фрагментами:
## 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
Не знаете, как можно изменить этот сценарий словаря? Или мне лучше написать что-нибудь новое? Что еще можно использовать кроме словарей? Также для меня как ученика было бы здорово протестировать другое решение, а не только словарь.
Спасибо!