在python中对许多csv文件进行双重条件过滤

时间:2013-06-22 15:17:36

标签: python duplicates

我将堆叠到以下任务中:合并特定掩码下的所有文件并根据两个条件删除重复项:如果nameTEXT相同,请保留具有最大第4列的文件。

我目前有这个没有经过良好测试的代码(基于我之前的问题),但因为它使用字典,它会重写以前具有相同名称但不同TEXT的数据。我试图只使用列表。

如何同时在两个条件下进行过滤?

非常感谢您的帮助。

import glob,csv
files = glob.glob("*.txt")
fo = open("combined.csv","a")
writer = csv.writer(fo,delimiter=' ')

datum = []
nyt = set()

for f in files:
    with open(f) as fi:
        for row in csv.reader(fi,delimiter=' '):
            crow = row[0],row[4]
            nyt.add(crow)
            if crow in nyt:
                dupl = [element for element in datum if element[0] == row[0]]
                if dupl[0][3] < row[3]:
                    # replace row in datum with row
                if dupl[0][3] > row[3]:
                    continue
            else:
                datum.append(row)

实施例

file1      
name1 0.06 0.91 0.17 TEXT1 smthing smthing
name2 0.46 0.42 0.02 TEXT1 smthing smthing
name3 0.15 0.80 0.61 TEXT1 smthing smthing
file2      
name1 0.68 0.38 0.61 TEXT2 smthing smthing
name2 0.73 0.62 0.03 TEXT2 smthing smthing
name3 0.84 0.81 0.60 TEXT2 smthing smthing
file3      
name1 0.86 0.18 0.03 TEXT1 smthing smthing
name2 0.04 0.12 0.75 TEXT1 smthing smthing
name3 0.59 0.70 0.71 TEXT1 smthing smthing

1 个答案:

答案 0 :(得分:0)

我在思考太多,快速解决方案是将两个值组合为dict的唯一键

import glob,csv
files = glob.glob("*.txt")
fo = open("combined.csv","a")
writer = csv.writer(fo,delimiter=' ')

datum = {}

for f in files:
    with open(f) as fi:
        for row in csv.reader(fi,delimiter=' '):
            crow = row[0],row[4]
            if crow in datum:
                if float(datum[crow][-4]) < float(row[3]):
                    datum[crow] = row[0:]
            else:
                datum[crow] = row[0:]