您好我想过滤掉第二列(十六进制)具有值80
或81
的行,并过滤掉第二列为0
的行,只要它在行的下方有81
第二栏中的Delta,Hex,Type,Time
0,81,DTE,10 pm
1,0,DTE,10 pm
0,01,DTE,10 pm
1,1c,DTE,9 pm
1,0,DTE,10 pm
0,1d,DTE,10 pm
1,0,DTE,10 pm
:
sample.csv:
80
所以这是我编写的脚本,它在第二列(Hex)中过滤掉值为81
0
和import csv
with open('sample.csv', 'r') as f:
rows=csv.DictReader(f, fieldnames=None,restkey=None,restval=None,dialect='excel',delimiter=",")
filtered_rows=filter(lambda p:'80' != p['Hex'] and '81' != p['Hex'] and '0' != p['Hex'], rows)
for i in filtered_rows :
print (i['Hex'])
的行。
Script.py:
0
因此,它会过滤掉第二列中01
1c
1d
的所有行。
上述脚本的当前输出:
0
但我不希望过滤第二列中81
的行,如果它不在第二列中01
1c
0
1d
0
的行下方:
预期输出:
{{1}}
答案 0 :(得分:1)
如果你需要一个非当前状态,0条件,你应该过滤迭代它的列表,而不是lambda
>>> import csv
>>> with open('sample.csv', 'r') as f:
... rows=csv.DictReader(f, fieldnames=None,restkey=None,restval=None,dialect='excel',delimiter=",")
... filtered_rows=[]
... previous_flag=False
... for item in rows:
... if item['Hex'] not in ['81','80'] and not (previous_flag and item['Hex'] == '0'):
... filtered_rows.append(item)
... previous_flag = item['Hex'] == '81'
... for i in filtered_rows :
... print (i['Hex'])
...
01
1c
0
1d
0