2017-06-07 37 views
0

我已經有了一個具有不同數據格式的.csv文件,我試圖使用同一列上的值進行操作。在csv中過濾特定行,記錄上一個值

我的csv文件是這樣的:

"int","float","stirng", more data 

例子:

"2","1.378","Johnny" 
"1","1.379","Walker" 
"5","1.380","Jack" 
"8","1.700","Daniels" 
"8","1.710","Baileys" 
"8","1.381","Monkey" 
"8","1.711","Shoulder" 
"8","1.383","Captain" 
"8","1.385","Morgan" 
"8","1.392","Drinks" 
More rows 

我想在第二列減去值,如果它們的區別在於> X。 (只有那些,我不在乎別人)。

我迄今爲止代碼:

with open ('input.csv', 'r') as file, open ('output.csv', 'w') as f_out: 
    readCSV = csv.reader(file) 
    writeCSV = csv.writer(f_out, lineterminator='\n') 
    last = None 

    for row in readCSV: 
     datalat = float(row[1]) 

     if last is not None: 
      #print("difference -> %f" %(datalat-last)) 
      outp = (datalat-last) 
      if outp <= 0.02: 
       writeCSV.writerow(row) 
      last = datalat 

輸出看起來像:

5,1.380,Jack 
8,1.710,Baileys 
8,1.381,Monkey 
8,1.383,Captain 
8,1.385,Morgan 
8,1.392,Drinks 

但我想它是:

"2","1.378","Johnny" 
"1","1.379","Walker" 
"5","1.380","Jack" 
"8","1.381","Monkey" 
"8","1.383","Captain" 
"8","1.385","Morgan" 
"8","1.392","Drinks" 

所以應該做的是隻寫入行數小於0.02的差異,如果有一個差異較大的行丟棄它,然後比較下一行到la st書寫的行,而不是最後一個被丟棄的行。

+0

你不更新'last'隨時隨地 –

+0

@MosesKoledoye對不起,我錯過了線,而複製我的代碼。更新。 – David

回答

1

兩件事情:

  1. 你應該(用abs)的區別,你不知道先驗其中兩個較大取絕對值。
  2. 如果條件滿足,只更新last,所以last永遠不會被丟棄。

last = float(next(readCSV)[1]) # assign first reference value 
f_out.seek(0)     # return to start of file 
for row in readCSV: 
    datalat = float(row[1]) 
    diff = abs(datalat-last) 
    if diff <= 0.02: 
     writeCSV.writerow(row) 
     last = datalat 
+1

工程就像一個魅力。謝謝您的意見! – David

相關問題