Как правило, есть 3 способа анализа данных:
- Использование
str
методов. - Использование регулярных выражений, например, с
re
. - Используйте синтаксический анализатор, например
parsimonious
Вот действительно фантастический ответ на вопрос об использовании регулярных выражений ипарсеры.
Они все нервные. Но строковые методы легко отлаживать, а регулярные выражения и парсеры - нет. Итак, мой первый шаг - попытаться распаковать данные строковыми методами, например, вот так:
d = data.split('\\')
nxp, items, this_item = None, {}, {}
for item in d:
if 'nxp' in item:
if nxp:
items[nxp] = this_item
this_item = {}
nxp = item.strip().split(':')[-1]
continue
if '=' in item:
key, value = item.strip().split('=')
this_item[key] = value
else:
items[nxp] = this_item
В результате получается словарь данных:
{'NX_A0A0A6YYD4-1': {'PName': 'T cell receptor beta variable 13 isoform Iso 1',
'GName': 'TRBV13',
'NcbiTaxId': '9606',
'TaxName': 'Homo Sapiens',
'Length': '124',
'SV': '5',
'EV': '31',
'PE': '3',
'ModResPsi': '(52|MOD:00798|half cystine)(120|MOD:00798|half cystine)',
'ModRes': '(106||N-linked (GlcNAc...) asparagine)',
'VariantSimple': '(18|H)(27|V)',
'Processed': '(1|31|PEFF:0001021|signal peptide)(32|124|PEFF:0001020|mature protein) MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL'},
'NX_A0A1B0GV90-1': {'PName': 'Cortexin domain containing 2 isoform Iso 1',
'GName': 'CTXND2',
'NcbiTaxId': '9606',
'TaxName': 'Homo Sapiens',
'Length': '55',
'SV': '1',
'EV': '11',
'PE': '3',
'VariantSimple': '(13|N)(22|F)(29|T)(34|Q)(45|T)',
'Processed': '(1|55|PEFF:0001020|mature protein) MEDSSLSSGVDVDKGFAIAFVVLLFLFLIVMIFRCAKLVKNPYKASSTTTEPSLS'}}
И это легче
Теперь мы можем перейти к этой последовательности символов, и, возможно, это не так уж сложно, и мы можем подумать об использовании регулярных выражений без головной боли, например:
import re
re.search(r'\) ([ A-Z]+)', items['NX_A0A0A6YYD4-1']['Processed']).groups()[0]
Это дает:
'MLSPDLPDSAWNTRLLCRVMLCLLGAGSVAAGVIQSPRHLIKEKRETATLKCYPIPRHDT VYWYQQGPGQDPQFLISFYEKMQSDKGSIPDRFSAQQFSDYHSELNMSSLELGDSALYFC ASSL'