2017-06-07 35 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

相关问题