过滤具有多个条件的csv行

时间:2014-10-03 07:11:35

标签: python csv python-3.x

您好我想过滤掉第二列(十六进制)具有值8081的行,并过滤掉第二列为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 0import 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}}

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