0

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

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

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

非常感谢您的帮助。

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
4

1 回答 1

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:]
于 2013-06-22T16:07:15.677 回答