我正在尝试根据需要连续发生的某些条件对表格进行排序。表的简化版本:
Number Time
1 23
2 45
3 67
4 23
5 11
6 45
7 123
8 34
...
我需要检查时间是否连续 5 次 <40。就像我需要检查第 1-5 行,然后是 2-6 等...然后第一次和最后一次打印并保存到文件中。就像,如果满足第 2-6 行的条件,我将需要打印第 2 行和第 6 行的时间。在满足条件后,检查应该停止。无需检查其他行。到目前为止,我实现了一个带有两个临时变量的计数器来连续检查 3 个项目。它工作正常。但是,如果我想检查连续发生 30 次的条件,我不能只手动创建 30 个临时变量。实现这一目标的最佳方法是什么?我想我只需要某种循环。谢谢!
这是我的代码的一部分:
reader = csv.reader(open(filename))
counter, temp1, temp2, numrow = 0, 0, 0, 0
for row in reader:
numrow+=1
if numrow <5:
col0, col1, col4, col5, col6, col23, col24, col25 = float(row[0]),
float(row[1]), float(row[4]), float(row[5]),float(row[6]),
float(row[23]), float(row[24]), float(row[25])
if col1 <= 40:
list1=(col1, col3, col4, col5, col6, col23, col24, col25)
counter += 1
if counter == 3:
print("Cell# %s" %filename[-10:-5])
print LAYOUT.format(*headers_short)
print LAYOUT.format(*temp1)
print LAYOUT.format(*temp2)
print LAYOUT.format(*list1)
print ""
elif counter == 1:
temp1=list1
elif counter == 2:
temp2=list1
else:
counter = 0
我实施了 Bakuriu 建议的解决方案,它似乎正在工作。但是,结合众多测试的最佳方式是什么?就像我需要检查几个条件一样。可以说:v
- 连续 10 次循环效率低于 40,
- 连续 5 个循环中小于 40 的容量
- 连续 25 次循环少于 40 次
- 还有一些……
现在我只为每次测试打开 csv.reader 并运行该函数。我想这不是最有效的方法,尽管它有效。对不起,我只是一个完整的菜鸟。
csvfiles = glob.glob('processed_data/*.stat')
for filename in csvfiles:
flag=[]
flag.append(filename[-12:-5])
reader = csv.reader(open(filename))
for a, row_group in enumerate(row_grouper(reader,10)):
if all(float(row[1]) < 40 for row in row_group):
str1= "Efficiency is less than 40 in cycles "+ str(a+1)+'-'+str(a+10) #i is the index of the first row in the group.
flag.append(str1)
break #stop processing other rows.
reader = csv.reader(open(filename))
for b, row_group in enumerate(row_grouper(reader,5)):
if all(float(row[3]) < 40 for row in row_group):
str1= "Capacity is less than 40 minutes in cycles "+ str(a+1)+'-'+str(a+5)
flag.append(str1)
break #stop processing other rows.
reader = csv.reader(open(filename))
for b, row_group in enumerate(row_grouper(reader,25)):
if all(float(row[3]) < 40 for row in row_group):
str1= "Time is less than < 40 in cycles "+ str(a+1)+'-'+str(a+25)
flag.append(str1)
break #stop processing other rows.
if len(flag)>1:
for i in flag:
print i
print '\n'