【问题标题】:Pull out the minumum value in the CSV file提取 CSV 文件中的最小值
【发布时间】:2018-08-12 14:21:04
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • 您在哪里更新值?我看到你所做的只是一次使用函数读取同一个文件两次,另一次在没有函数的情况下执行相同的确切过程,所需的输出是什么

标签: python function csv main minimum


【解决方案1】:

这可以使用 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 作为一行,并将第九个值作为整数返回。

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多