繁体   English   中英

如果使用PYTHON不能满足条件,应如何以3行的块为单位读取CSV并以块为单位读取跳转行?

[英]How to read CSV in chunks of 3 line & Jump lines in chunks, if condition unsatisfied using PYTHON?

我有一个很大的CSV文件(〜20000行),如下所示。 每行对应于数据/秒。 因此60行表示60秒后的数据。

我正在寻找三行之间的稳定数据集。 因此,如果COLUMN H数据的连续变化不超过5,对于连续3行,我可以称其为稳定数据。 (297,319,326大于5,因此不稳定)。

如果变化大于5,则我的代码应在14秒后(14行之后)检查另一组3行。 (362,362,355的变化不超过5,因此稳定且已准备好一个数据快照),并且此过程一直持续到最后一行,以检查更多的数据快照。

然后将每个稳定值取平均值并打印到.TXT文件中进行分析。

A,B,C,D,E,F,G, H ,I,J,K,L
1)FALSE,470496 ,,, 0,67,297,341, “3701”, “61216”,0
2)FALSE,464497 ,,, 0,67,319,341, “3701”, “61216”,0
3)FALSE,460498 ,,, 0,67,326,348, “4599”, “61216”,0
4)FALSE,459500 ,,, 0,67,341,348, “4599”, “61216”,0
...
...
11)FALSE,460502 ,,, 0,67,375,348, “4599”, “61216”,0
12)TRUE,461503 ,,, 0,67,350,348, “4599”, “61216”,0
13)TRUE,463504 ,,, 0,67,355,348, “5479”, “61216”,0
14)TRUE,467505 ,,, 0,67,362,348, “5479”, “61216”,0
15)TRUE,470507 ,,, 0,67,362,348, “5479”, “61216”,0
16)TRUE,472508 ,,, 1,67,355,355, “5479”, “61216”,0

我的代码:(PYTHON 3.5)

`

import csv  
with open ('ABC.csv','r+') as csvfile:  
  reader=csv.reader(csvfile)  
  ROWCOUNT=0;
  for row in reader:  
    ROWCOUNT=ROWCOUNT+1  
    if row[7] in (max(ROWCOUNT,ROWCOUNT+1,ROWCOUNT+2) -min(ROWCOUNT,ROWCOUNT+1,ROWCOUNT+2) < 10:  
      average=avg(ROWCOUNT,ROWCOUNT+1,ROWCOUNT+2)  
    else:  
      ..  
      ... 

`

我的代码根本不起作用,因此是逻辑上的。

有人建议使用PYTHON对此代码进行编码。

由于CSV文件很小(仅约20.000行),因此您可以将其读入内存并在其中进行处理:

import csv  
with open ('ABC.csv') as csvfile:
    reader=csv.reader(csvfile)
    data = [row for row in reader]
for i in range(0,len(data)-2,14):
    sample = int(data[i][7]), int(data[i+1][7]), int(data[i+2][7])
    if min(sample) >= max(sample)-5:
        average = sum(sample)/3
        print(average)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM