Raport z pliku CSV

Zadanie 13 z 15 · rozdział 20Trudność: 2 z 3filescsvdict

Treść zadania

Wczytaj ścieżkę pliku CSV z ocenami uczniów. Pierwszy wiersz pliku to nagłówek imie,przedmiot,ocena, a każdy kolejny wiersz opisuje jedną ocenę: imię ucznia, przedmiot i ocenę. Pola są oddzielone przecinkami, a pole zawierające przecinek jest ujęte w cudzysłów, np. Adam,"WOS, rozszerzony",5.

Dla każdego ucznia oblicz średnią wszystkich jego ocen (ze wszystkich przedmiotów razem) i wypisz wyniki uczniów w kolejności alfabetycznej imion.

Dane wejściowe

  • 1. linia: ścieżka pliku CSV

Dane wyjściowe

  • Dla każdego ucznia jedna linia imię: średnia, średnia z dokładnie 2 miejscami po przecinku. Uczniowie posortowani rosnąco po imieniu (tak jak sortuje sorted()).
  • Brak danych. — jeśli plik zawiera tylko nagłówek.
  • Plik nie istnieje. — jeśli podana ścieżka nie wskazuje istniejącego pliku.

Ograniczenia

  • Oceny to liczby od 1 do 6, całkowite albo z kropką dziesiętną (np. 4.5).
  • Plik nie zawiera pustych wierszy. Imiona porównujemy dokładnie — wielkość liter ma znaczenie.

Uwagi

  • Moduł csv dzieli wiersze na pola za Ciebie i poprawnie obsługuje cudzysłowy — zwykłe split(",") rozbiłoby "WOS, rozszerzony" na dwa pola. csv.DictReader pomija nagłówek i zwraca każdy kolejny wiersz jako słownik {nazwa kolumny: wartość}:
import csv

with open("oceny.csv", encoding="utf-8", newline="") as plik:
    for wiersz in csv.DictReader(plik):
        print(wiersz["imie"], wiersz["przedmiot"], wiersz["ocena"])
  • Wartości z pliku CSV są napisami — ocenę zamień na liczbę przez float(). Sumy i liczby ocen zbieraj w słownikach, których kluczem jest imię.

Przykład

Pliki przed uruchomieniem
  • oceny.csv
    imie,przedmiot,ocena
    Ola,matematyka,5
    Jan,fizyka,3
    Ola,"WOS, rozszerzony",4
    Jan,matematyka,4
    Ewa,historia,6
Wejście
oceny.csv
Wyjście
Ewa: 6.00
Jan: 3.50
Ola: 4.50

Ola ma oceny 5 i 4, więc jej średnia to $\frac{5 + 4}{2} = 4.5$.

Zasady obowiązujące w rozdziale 20

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin), wykonywaniu operacji na plikach i folderach oraz wypisywaniu wyniku na standardowe wyjście (stdout).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Program działa na plikach w katalogu roboczym, czyli w folderze, w którym jest uruchamiany. Wszystkie ścieżki na wejściu są względne wobec katalogu roboczego i używają / jako separatora, np. dane/raport.txt. Ścieżki wczytuj jako całe linie — mogą zawierać spacje.
  • Sprawdzarka przed każdym testem tworzy nowy katalog roboczy z plikami opisanymi w teście, uruchamia program, a potem sprawdza zarówno wypisany tekst, jak i zawartość plików.
  • W przykładach Pliki przed: pokazuje zawartość katalogu roboczego przed uruchomieniem programu, a Pliki po: — stan wybranych plików po jego zakończeniu. Każda linia to ścieżka pliku, a linie zaczynające się od | to kolejne wiersze jego treści. Ścieżka zakończona / to pusty folder, (rozmiar: N B) oznacza plik o rozmiarze N bajtów, a (usunięty) — plik, którego po zakończeniu programu ma już nie być.
  • Pliki tekstowe są zapisane w kodowaniu UTF-8 — otwieraj je przez open(sciezka, encoding="utf-8").
  • Rozszerzenie to końcówka nazwy pliku od ostatniej kropki (razem z nią), np. archiwum.tar.gz ma rozszerzenie .gz. Rozszerzenia porównuj bez względu na wielkość liter (.TXT to też .txt).
  • Listy plików wypisuj po jednym w linii, jako ścieżki względem podanego folderu z separatorem / (np. 2024/raport.txt), posortowane rosnąco tak, jak sortuje napisy funkcja sorted(). Na Windowsie ścieżki mają separator \ — zamień go na / (np. metodą Path.as_posix()).
  • Komunikaty dla przypadków brzegowych wypisuj dokładnie w podanej postaci, np. Folder nie istnieje., Plik nie istnieje., Brak plików.
  • Program nie wypisuje komunikatów typu „Podaj ścieżkę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
klasa.csv
Oczekiwane wyjście
Bartek: 2.50
Kasia: 4.33
Pliki przed uruchomieniem
  • klasa.csv
    imie,przedmiot,ocena
    Kasia,polski,4.5
    Kasia,matematyka,5
    Bartek,polski,3
    Kasia,angielski,3.5
    Bartek,chemia,2

Test 2

Nie uruchomiono
Wejście
oceny.csv
Oczekiwane wyjście
Adam: 4.50
Zofia: 6.00
Pliki przed uruchomieniem
  • oceny.csv
    imie,przedmiot,ocena
    Adam,"WOS, rozszerzony",5
    Adam,historia,4
    Zofia,"język polski, poziom podstawowy",6

Test 3

Nie uruchomiono
Wejście
moja klasa/oceny 2024.csv
Oczekiwane wyjście
Adam: 4.50
Marta: 5.75
Zenon: 3.50
Pliki przed uruchomieniem
  • moja klasa/oceny 2024.csv
    imie,przedmiot,ocena
    Zenon,fizyka,2
    Adam,fizyka,3
    Marta,fizyka,6
    Adam,chemia,6
    Zenon,chemia,5
    Marta,chemia,5.5

Test 4

Nie uruchomiono
Wejście
dane/2b.csv
Oczekiwane wyjście
Żaneta: 1.00
Pliki przed uruchomieniem
  • dane/2b.csv
    imie,przedmiot,ocena
    Żaneta,biologia,1

Test 5

Nie uruchomiono
Wejście
o.csv
Oczekiwane wyjście
Ola: 4.50
ola: 2.00
Pliki przed uruchomieniem
  • o.csv
    imie,przedmiot,ocena
    ola,plastyka,2
    Ola,plastyka,4
    Ola,muzyka,5

Test 6

Nie uruchomiono
Wejście
puste.csv
Oczekiwane wyjście
Brak danych.
Pliki przed uruchomieniem
  • puste.csv
    imie,przedmiot,ocena

Test 7

Nie uruchomiono
Wejście
klasa.csv
Oczekiwane wyjście
Plik nie istnieje.
Pliki przed uruchomieniem
  • oceny.csv
    imie,przedmiot,ocena
    Adam,fizyka,5
Uruchom z własnymi danymi