Я пишу функцию python, чтобы взять фрагмент текста, проанализированный из текстового файла с использованием f.readlines
и разбив этот кусок текста на список. Текст содержит разделители, и я хочу разделить этот текст именно в этих местах. Ниже приведен пример текстового файла.Разделение текстового документа на определенные строки текста с использованием python
@model:2.4.0=Skeleton "Skeleton"
@compartments
Cell=1.0 "Cell"
@species
Cell:[A]=100.0 "A"
Cell:[B]=1.0 "B"
Cell:[C]=0.0 "C"
Cell:[D]=0.0 "D"
@parameters
kcat=4000
km = 146
v2_k = 88
@reactions
@r=v1 "v1"
A -> C : B
Cell * kcat * B * A/(km + A)
@r=v2 "v2"
C -> C+D
Cell * v2_k * C
Моего желаемый результат должен иметь словарь питона, который имеет имя разделителей в качестве ключей и всего содержания между этим делителем и следующим в качестве значений. Например, первый элемент sections
словаря должно быть:
sections['@model']=:2.4.0=Skeleton "Skeleton"
Текущий код
def split_sections(SBshorthand_file):
'''
Takes a SBshorthand file and returns a dictionary of each of the sections.
Keys of the dictionary are the dividers.
Values of dictionary are the content between dividers.
'''
SBfile=parse_SBshorthand_read(SBshorthand_file) #simple parsing function. uses f.read()
dividers=["@model", "@units", "@compartments", "@species", "@parameters", "@rules", "@reactions", "@events"]
sections={}
for i in dividers:
pattern=re.compile(i)
if re.findall(pattern,SBfile) == []:
pass
# print 'Section \'{}\' not present in {}'.format(i,SBshorthand_file)
else:
SBfile2=re.sub(pattern,'\n'+i,SBfile)
print SBfile2
Это, однако, не делать то, что я хочу. У кого-нибудь есть идеи, как исправить мой код? Благодаря
----------------- Редактировать --------------------
Пожалуйста, обратите внимание, что раздел «@reactions» содержит ряд «реакций», все из которых начинаются с @r, но все они должны быть сгруппированы под ключом реакции.
К сожалению, я случайно отредактировали вместо вопроса и это обыкновение позвольте мне изменить его обратно. Ваш код работает, но вы знаете, чтобы исключить тег '@r' (как я объяснил в редакции). Спасибо – CiaranWelsh
@ user3059024 проверить правку. – vks