2013-06-22 27 views
0

我將堆疊到以下任務中:合併特定掩碼下的所有文件,並根據兩個條件刪除重複項:如果nameTEXT相同,則保留具有最大第四列。解決方案:python中的許多csv文件的雙重條件過濾

我目前有這個沒有很好測試的代碼(基於我以前的問題),但因爲它使用字典,所以它重寫了以前具有相同名稱但不同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

關於'唯一的密鑰相結合,如果烏鴉nyt':在此之上的一行中,您將'crow'添加到'nyt',因此它總是包含在其中。要替換列表中的項目,您需要它的索引,因此請閱讀列表類型的索引,因此請閱讀列表類型的'index'-method –

+0

我將這些值合併爲一個唯一鍵 –

+0

@JohnAmraph請記住在您允許時接受您自己的答案。 – tacaswell

回答

0

我想得太多了,快速的解決方案是兩個值作爲字典

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:] 
+0

比處理字典的值 –

相關問題