使用CSV文件在Python中查找最接近的值

时间:2018-05-27 18:00:55

标签: python csv

我是新手程序员。我正在尝试使用Python分析一些名为test_score的简单CSV文件(我有一个非常大的文件,我正在分析,但我将其压缩以测试我的代码)。

CSV文件如下所示:

First Name,Last Name,Gender,Score
John,Smith,Male,100
Jane,Doe,Female,97
Henry,Vo,Male,75
Jennifer,Bradley,Female,80

目标是根据用户输入找到最接近的分数。用户选择是男性还是女性。用户还输入分数。

我的代码如下所示:

import csv
user_gender = input("Male or Female\n")
user_score = input("Closest test score\n")

path = r'C:\Users\Joe\Desktop\Exercise\test_score.csv'
with open(path, 'r') as csvfile:
readCSV = csv.DictReader(csvfile, delimiter=',')

for line in readCSV:
    first_name = line['First Name']
    last_name = line['Last Name']
    gender = line['Gender']
    score = int(line['Score'])

    if user_gender.lower() == gender.lower():
        print (score)

到目前为止,该代码适用于根据性别查找所有分数。我需要添加哪些代码才能专门找到最接近用户输入分数的分数?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用TRANSLATE( .. )

TRANSLATE(let! pattern = expr in cexpr) =
  builder.Bind(expr, (fun pattern -> TRANSLATE(cexpr) ))

输出:

min

编辑:如果您想使用import csv def closest_score(val, gender = 'check_all'): data = list(csv.reader(open('filename.csv')))[1:] if gender == 'check_all': return min(data, key=lambda x:abs(val-int(x[-1]))) return min([i for i in data if i[-2].lower() == gender.lower()], key=lambda x:abs(val-int(x[-1]))) print(closest_score(70)) ,则该功能变为:

['Henry', 'Vo', 'Male', '75']