拉出CSV文件中的最小值

时间:2018-03-05 00:03:07

标签: python function csv main minimum

我正在尝试使用Python在csv文件中提取具有最小值的行的所有相关信息。 以下是我的代码,以找出相关信息。 当我对它进行编码时,最小值为12。 但是当我输入该函数并将处理最小值以查找并记录csv文件中的其他数据时。该值无法更新。我缺少更新line [9]的值?

CVS文件包含一列数字,我需要找到最小值。 单独的编码很适合找到12的最小值,我做了它作为测试。但是在我分配一个函数并使用相同的方法来查找最小值后,它不起作用。 因为我需要在代码的其他部分使用最小值,所以如果我可以将它放在函数中并使其工作,那就更好了。 所以我想知道如何转移函数也可以找到最小值。 提前谢谢。

#put finding minimum in to a function and will use the returned minimum 
#to pull out other information    
def findMin():  
minMile = 100
if num<minMile:
    minMile=num
return minMile


def main():
    fileIn = open("epaVehicleData2008.csv", "r")
    fileIn.readline()
    for line in fileIn:
        line = line.split(",")
        num=int(line[9])
        findmin(line)
        minMile=int(line[9])
        print(minMile)


main()

#separate code for finding the minimum as a test
fileIn = open("epaVehicleData2008.csv", "r")
fileIn.readline()
minMile = 100
for line in fileIn:
    line = line.split(",")
    num = int(line[9])
    if num < minMile:
        minMile = num
print(minMile)

1 个答案:

答案 0 :(得分:0)

这可以使用Python的CSV库来帮助阅读每一行并自动将其拆分为列表:

import csv

def findMin(filename):
    with open(filename, 'r', newline='') as f_input:
        csv_input = csv.reader(f_input)
        return min(csv_input, key=lambda x: int(x[9]))[9]

print('Min mile', findMin('epaVehicleData2008.csv'))

内置min()函数可用于确定最小的行。它需要一个key参数来告诉它要与哪个输入部分进行比较,在本例中是第9个元素。

每次拨打findMin()时,minMile的值始终为100。在您的设计中,您需要将变量设置为全局变量,而不是本地变量。也许更好的方法是将函数传递给文件名,让它一次读取并计算最小值并返回该值。

lambda只是一个内联编写的函数,无需单独的def。在这种情况下,它将x作为一行,并将第九个值作为整数返回。