我运行下面的代码,其中我使用一个标志来识别所有{' / epg //激活'}然后仅当标志为True时才打印'data_EPG [event]'遵循:
data_EPG = {}
lines = data.split("\n")
flag = False
for line in filter(None, lines):
col = line.split(";")
event = col[9]
if flag :
if '//activate' in col[9] or col[9]=='/app//standby' :
data_EPG[event] = {
#'@mac':{
# col[6],
# },
'Ev':{
col[9],
}
}
flag == False
if col[9]== '/epg//activate':
flag = True
if event in data_EPG.keys():
print(data_EPG[event])
数据示例:
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/homepage/ws/click;TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908621;/epg//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /epg/menu/click;Grid
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//keypress;home,1
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /vod//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/epg//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby;
预期结果:
{'Ev': {'/epg//activate'}}
{'Ev': {'/vod//activate'}}
{'Ev': {'/epg//activate'}}
{'Ev': {'/app//standby'}}
数据示例2(在' //激活'在col [9]或col [9] ==' / app //待机'条件下):
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /epg//activate;TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908621; /homepage//activate; TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /vod//activate;Grid
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /voyager//activate;home,1
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /homepage//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /epg//activate; TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /live//activate;TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /main_process//activate
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby; 1
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /main_process//activate; TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby; 1
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /homepage//activate; TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /live//activate;Grid
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby; 1
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /homepage//activate; TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /live//activate;Grid
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /6play//activate; TV
预期结果:
{'Ev': {'/epg//activate'}}
{'Ev': {'/homepage//activate'}}
{'Ev': {'/epg//activate'}}
{'Ev': {'/live//activate'}}
换句话说,我只保留'/epg//activate'
的出现,'/xxx//activate'
的第一次出现或'/app//standby'
出现后'/epg//activate'
的第一次出现。< / p>
如果你知道如何修改我的代码以获得我应该得到的结果,请帮助。谢谢!
答案 0 :(得分:0)
像这样修改(对于两种不同的情况使用两个标志:app/standby
必须立即跟随/epg//activate
,而/***//activate
的任何其他第一次出现必须不立即关注/epg//activate
:
data = '''
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/homepage/ws/click;TV
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908621;/epg//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/epg/menu/click;Grid
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/app//keypress;home,1
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/vod//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/app//standby;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/epg//activate;
XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642;/app//standby;
'''
# data = '''
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /epg//activate;TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908621; /homepage//activate; TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /vod//activate;Grid
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /voyager//activate;home,1
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /homepage//activate;
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /epg//activate; TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /live//activate;TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /main_process//activate
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby; 1
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /main_process//activate; TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby; 1
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /homepage//activate; TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /live//activate;Grid
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /app//standby; 1
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /homepage//activate; TV
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /live//activate;Grid
# XXX;ZZZZZ;YY;DD;IIII;SSSS_92;AAAA;TTTTT;1516979908642; /6play//activate; TV
# '''
data_EPG = {}
lines = data.split('\n')
flag = False
appstandby_flag = False
for line in filter(None, lines):
col = line.split(';')
event = col[9].strip()
if event == '/epg//activate':
data_EPG[event] = {'Ev': {event, }}
flag = True
appstandby_flag = True
elif flag and '//activate' in event:
data_EPG[event] = {'Ev': {event, }}
elif appstandby_flag and event == '/app//standby':
data_EPG[event] = {'Ev': {event, }}
else:
appstandby_flag = False
if flag and event in data_EPG.keys():
print(data_EPG[event])
if flag and event != '/epg//activate' and '//activate' in event:
flag = False
输出(使用第一个数据):
{'Ev': {'/epg//activate'}}
{'Ev': {'/vod//activate'}}
{'Ev': {'/epg//activate'}}
{'Ev': {'/app//standby'}}
(改为使用第二个数据):
{'Ev': {'/epg//activate'}}
{'Ev': {'/homepage//activate'}}
{'Ev': {'/epg//activate'}}
{'Ev': {'/live//activate'}}