从a.txt中删除不直接成功的行

时间:2018-03-02 14:16:53

标签: python-3.x dictionary indexing

我运行下面的代码,其中我使用一个标志来识别所有{' / 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>

如果你知道如何修改我的代码以获得我应该得到的结果,请帮助。谢谢!

1 个答案:

答案 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'}}