Найти - Пользователи
Полная версия: Скрипт, по сортировке одинаковых данных из файла и выдача их на экран
Начало » Python для новичков » Скрипт, по сортировке одинаковых данных из файла и выдача их на экран
1 2
LadyDi
Скрипт который расчитывает среднее арифметическое всех оценок ученика, по всем предметам, которые он сдавал.Данные находятся в файле, который запускается с командной строки. На одного ученика 1-n рядов, в каждом ряду информация об одном предмете. Скрипт должен работать, если текстовый файл пустой, а если файла не существует или его нельзя открыть, то скрипт выдает код (1).
пример файла:
Имя студента, Предмет, Пункты за предмет, Оценка за предмет
Содержание файла Иван Иванов;Математика,5,4
Иван Иванов,физика,2,5
Николай Сидоров, Английский,4,4
пример при запуске скрипта:
Только Имя студента и его средняя оценка по всем предметам
Иван Иванов;4,5
Николай Сидоров;4

Не знаю верно или нет, но
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import os
from os import path, access, R_OK

#Если файла нет или его не открыть
PATH='./marks.txt'

if path.isfile(PATH) and access(PATH, X_OK):
print “File exists and is executable”
else:
print “File is missing or is not executable”
sys.exit (1)

#Тут я так понимаю файл открываем и читаем строчки
file = marks.txt
f = open(“file”,“r”)
l = f.readline()
А вот как сделать, чтобы он сортировал данные по имени ученика и делал среднее арифметическое его оценок и выдавал его имя и эту среднюю оценку и указать, что скрипт работает если файл пустой, я не могу
ilnur
# -*- coding: utf-8 -*-
import sys
import os
PATH = 'test.txt'
if os.path.isfile(PATH) or os.access(PATH, os.R_OK):
    print 'File exists and is executable'
    # читаем данные из файла
    data = open(PATH).read().splitlines()
    # парсим данные
    # словарь, где сохраним имя и все оценки
    names_dicts = {}
    for i in data:
        name, lesson, value = i.split(',')
        if names_dicts.has_key(name):
            names_dicts[name].append(value)
        else:
            names_dicts[name] = [value,]
            
    # далее посчитаем среднюю оценку у человека
    for i in names_dicts.items():
        print i[0], sum(map(float, i[1]))/len(i[1])
else:
    print 'File is missing or is not executable'
python 2.7. вроде все отработало нормально
FishHook
if names_dicts.has_key(name):
            names_dicts[name].append(value)
        else:
            names_dicts[name] = [value,]
Открой для себя setdefault
ilnur
FishHook
спасибо. может ещё какие советы?

# -*- coding: utf-8 -*-
import sys
import os
PATH = 'test.txt'
if os.path.isfile(PATH) or os.access(PATH, os.R_OK):
    print 'File exists and is executable'
    # читаем данные из файла
    data = open(PATH).read().splitlines()
    # парсим данные
    # словарь, где сохраним имя и все оценки
    names_dicts = {}
    for i in data:
        name, lesson, value = i.split(',')
        # setdefault устанавливает новый ключ и значение, если его нет
        # если есть возвращает его значение
        names_dicts.setdefault(name, []).append(value)
          
    # далее посчитаем среднюю оценку у человека
    for i in names_dicts.items():
        print i[0], sum(map(float, i[1]))/len(i[1])
else:
    print 'File is missing or is not executable'
FishHook
if os.path.isfile(PATH) or os.access(PATH, os.R_OK):
может and?
pyuser
FishHook
Открой для себя setdefault
или defaultdict
ilnur
FishHook
if os.path.isfile(PATH) or os.access(PATH, os.R_OK):

может and?
точно. and
ilnur
pyuser
или defaultdict
чето он посложней. И для него ещё модуль импортировать надо.
в данной задачке setdefault наверное получше

Спасибо за информацию.
FishHook
И еще, Ильнур, использовать has_key для проверки существования ключа в словаре не актуально

Test for the presence of key in the dictionary. has_key() is deprecated in favor of key in d.

То есть теперь правильно делать
if key in my_dict:
ilnur
спасибо. тоже прочел про это только что.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB