gpt4 book ai didi

Python - 循环遍历 csv 文件行值

转载 作者:行者123 更新时间:2023-11-30 22:37:35 26 4
gpt4 key购买 nike

我有一个如下所示的 csv 文件 (test.csv),有两列。

338,800
338,550
339,670
340,600
327,500
301,430
299,350
284,339
284,338
283,335
283,330
283,310
282,310
282,300
282,300
283,290

从第 1 列,我想读取当前行并将其与前一行的值进行比较。如果它大于等于,则继续比较,如果当前单元格的值小于上一行 - 那么我想要同一行中第二列的值。

接下来,我想将第一列中获得的较大值除以第二列同一单元格中的值。让我说清楚。

例如,在上面给出的表格中:根据我的要求,我们从第 1 列得到的较小值是 327(因为 327 小于之前的值 340) - 然后我们取 500(这是相应的单元格值)在第 2 栏)。 最后我们将 340 除以 500 得到值 0.68。我的 python 脚本应该在我们将值打印到控制台后立即退出。

目前,我在 bash 中使用以下脚本,并且运行良好

awk -F, '$1<p && $2!=0{ 
val=$2/p
if(val>=0.8 && val<=0.9)
{
print "A"
}
else if(val==0.7)
{
print "B"
}
else if(val>=0.5 && val <0.7)
{
print "C"

}
else if(val==0.5)
{
print "E"
}
else
{
print "D"
}
exit
}
{
p=$1
}' test.csv

但我想用python来做这件事,如果有任何帮助,我将不胜感激。这是我的方法

import csv

f = open("test.csv", "r+")
ff = csv.reader(f)

previous_line = ff.next()
while(True):
try:
current_line = ff.next()
if previous_line <= current_line:
print "smaller value"
except StopIteration:
break

最佳答案

我建议您使用csv.Reader的内置迭代,而不是直接调用.next()。并且您的代码不应测试普通 float 的相等性。在任何语言中,这不仅仅是 Python 的事情。此外,计算值 0.79 将得到 D,这可能不是您想要的。

from __future__ import division
import csv

def category(val):
if 0.8 < val <= 0.9:
return "A"
#Note: don't test val == 0.7: you should never test floats for equality
if abs(val - 0.7) < 1e-10:
return "B"
if 0.5 < val < 0.7:
return "C"
if abs(val - 0.5) < 1e-10:
return "E"
return "D"

with open(r"E:\...\test.csv", "r") as csvfile:
ff = csv.reader(csvfile)

previous_value = 0
for col1, col2 in ff:
if not col1.isdigit():
continue
value = int(col1)
if value >= previous_value:
previous_value = value
continue
else:
result = previous_value / int(col2)
print category(result)
break

根据 OP 请求的更改进行编辑

from __future__ import division
import csv

def category(val):
if 0.8 < val <= 0.9:
return "A"
#Note: don't test val == 0.7: you should never test floats for equality
if abs(val - 0.7) < 1e-10:
return "B"
if 0.5 < val < 0.7:
return "C"
if abs(val - 0.5) < 1e-10:
return "E"
return "D"

with open(r"E:\...\test.csv", "r") as csvfile:
ff = csv.reader(csvfile)

results = []
previous_value = 0
for col1, col2 in ff:
if not col1.isdigit():
continue
value = int(col1)
if value >= previous_value:
previous_value = value
continue
else:
result = previous_value / int(col2)
results.append(result)
print category(result)
previous_value = value
print (results)
print (sum(results))
print (category(sum(results) / len(results)))

我不得不猜测您想要用于重置先前值的逻辑,因为您的原始值在第一个结果处出现了循环中断。我不知道你想要如何处理文件结尾。此修订版产生以下输出:

C
D
A
A
A
D
[0.68, 0.7604651162790698, 0.86, 0.8820058997050148, 0.8477611940298507, 0.9129032258064517]
4.94313543582
A

如您所见,结果中肯定有两个以上的值。

关于Python - 循环遍历 csv 文件行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43847926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com