@Smeilz1
За любое развитие

Как считывать построчно элементы, разделенных точкой с запятой и помещать их в листы?

Нужно считать из файла цифры разделенные точкой с запятой и потом проводить математические операции с ними.
Например считать среднее по цифрам каждой строки или наоборот среднее по первой цифре каждой строки.
Например такой файл.
--------------
Петров;85;92;78
Сидоров;100;88;94
Иванов;58;72;85
------------------------
with open('Оценки.txt') as f:
    for l in f:
        p += l.split()

Этим кодом я создаю список ['Петров;85;92;78', 'Сидоров;100;88;94', 'Иванов;58;72;85']
А как теперь в этом списке создать вложенные списки для каждого элемента, чтобы стало так?
[['Петров', 85, 92, 78], ['Сидоров', 100, 88, 94], ['Иванов', 58, 72, 85]]
  • Вопрос задан
  • 324 просмотра
Решения вопроса 2
@estj
prepodavatel Vuza po background programming
тут понятно, что составители этой ЕГЭшной задачи хотят чтоб цифровой формат был
в трех последних элементах каждого подсписка в ответе... , сказано же --
"потом проводить математические операции (всякие усреднения, сортировки ...)"....
вот еще пример ответа (м.б. можно уменьшить , но вроде идиоматично (т.е. по питонячьи):

>>> f = open('fin.txt')
>>> ll = f.readlines()
>>> ll
['Петров;85;92;78\n', 'Сидоров;100;88;94\n', 'Иванов;58;72;85\n']
>>> ll1 = [i.replace('\n', '').split(';') for i in ll]
>>> ll1
[['Петров', '85', '92', '78'], ['Сидоров', '100', '88', '94'], ['Иванов', '58', '72', '85']] # теперь надо проинтовать , что надо
>>> ll2 = [[int(ll1[i][j]) for j in range(4) if ll1[i][j].isdigit()] for i in range(len(ll1))]
>>> ll2
[[85, 92, 78], [100, 88, 94], [58, 72, 85]]
# теперь вставляем по нулевому индексу из предыдущего списка строчечные фамилии
>>> [ll2[i].insert(0, ll1[i][0]) for i in range(len(ll2))]
[None, None, None] # здесь можно почистить или изменить
>>> ll2 # ответ в ll2
[['Петров', 85, 92, 78], ['Сидоров', 100, 88, 94], ['Иванов', 58, 72, 85]]

вообще-то это надо через кортежи делать, но для учебной простоты ...
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
with open('z:\\test.csv', 'rt') as f:
    data = [line.strip().split(';') for line in f]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:20
15000 руб./за проект
25 апр. 2024, в 12:08
300 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект