Итак, я создал небольшой фиктивный файл данных с именем life.csv
. Достаточно просто. Это выглядит так:
Name1,asd,1990,74,blah,blah,blah
Name2,bec,1923,41,blah,blah,blah
Name3,fre,1983,93,blah,blah,blah
Name4,jve,1066,23,blah,blah,blah
Name5,vne,1930,43,blah,blah,blah
Хороший совет - создать манекен, чтобы задавать вопросы, но пока не беспокойтесь об этом! :-) Надеюсь, это немного похоже на вашу верхнюю часть!
Я исправил ваш код. Если у вас возникли проблемы с диагностикой этого типа l oop, помните, что наличие операторов print () в каждой итерации - ваш лучший помощник при отладке, когда вы начинаете! Однако я надеюсь, что я не был слишком абстрактным, поэтому вы будете счастливы поработать над этим и понять, что происходит:
rows = []
with open(filename) as le_file:
next(le_file)
for line in le_file:
line = line.strip().split(",")
rows.append(line)
В результате вы получите переменную с именем rows, содержащую ваши данные разделения.
rows
[['Name1', 'asd', '1990', '74', 'blah', 'blah', 'blah'],
['Name2', 'bec', '1923', '41', 'blah', 'blah', 'blah'],
['Name3', 'fre', '1983', '93', 'blah', 'blah', 'blah'],
['Name4', 'jve', '1066', '23', 'blah', 'blah', 'blah'],
['Name5', 'vne', '1930', '43', 'blah', 'blah', 'blah']]
Теперь мы можем извлечь ИНДЕКС строки с наименьшим возрастом следующим образом:
ages = [row[3] for row in rows]
min_age_idx = ages.index(min(ages))
Это возвращает первый индекс в CSV минимального возраста , который теперь вы можете использовать, чтобы получить подробную информацию о рассматриваемой записи:
details = rows[min_age_idx]
print('Name: {}, Code: {}, Year: {}, Life Expectancy: {}'.format(details[0], details[1], details[2], details[3]))
Теперь я понимаю, что это не самое краткое решение, но очень хорошо иллюстрирует то, что вы пытаемся добиться. Проблема, с которой вы столкнулись, заключалась в том, что вы все еще читали файл, присваивающий записи переменным, ДО того, как вы имели какое-либо представление, какая строка имеет минимальный возраст. Поэтому каждый возраст ПОСЛЕ строки с минимумом будет переназначать переменные, которые вы в конечном итоге используете в своем операторе печати. Есть много способов решить проблему или упростить оператор печати, включая использование вспомогательных библиотек, таких как pandas, для чтения CSV , но я думаю, что важно знать, что происходит с вашей проблемой!
Причина «не может назначить вызов функции» в том, что min () - это вызов функции, и он находится в левой части вашего оператора. Если вы хотите присвоить переменной результат вызова функции min (), это будет выглядеть так:
my_min_value = min(values)
Левая часть =
- это то, что вы назначаете, правая часть - это операция, результат которой вы хотите присвоить ей.
Я действительно надеюсь, что это поможет вам прояснить ситуацию! : -)