Statystyki pliku tekstowego

Zadanie 6 z 15 · rozdział 20Trudność: 2 z 3filesstatsdict

Treść zadania

Wczytaj ścieżkę pliku tekstowego i oblicz:

  1. liczbę wierszy,
  2. łączną liczbę słów,
  3. średnią długość wiersza (w znakach),
  4. średnią liczbę słów w wierszu,
  5. ile razy występuje każde słowo.

Definicje:

  • Wiersze to fragmenty tekstu rozdzielone znakami nowej linii. Znak nowej linii na samym końcu pliku nie tworzy dodatkowego, pustego wiersza (tak działa str.splitlines()), ale puste wiersze w środku pliku się liczą.
  • Długość wiersza to liczba jego znaków (bez znaku nowej linii), łącznie ze spacjami i interpunkcją.
  • Słowo to najdłuższy ciąg kolejnych liter (także polskich). Wszystkie inne znaki — spacje, cyfry, interpunkcja, myślniki — rozdzielają słowa, np. Mark-up 2024r. zawiera słowa Mark, up i r.
  • Licząc wystąpienia, nie rozróżniaj wielkości liter: Ala i ala to to samo słowo.

Dane wejściowe

  • 1. linia: ścieżka pliku

Dane wyjściowe

  • 1. linia: liczba wierszy,
  • 2. linia: liczba słów,
  • 3. linia: średnia długość wiersza z dokładnie 2 miejscami po przecinku,
  • 4. linia: średnia liczba słów w wierszu z dokładnie 2 miejscami po przecinku,
  • dalej: dla każdego różnego słowa jedna linia słowo: liczba — słowo małymi literami, w kolejności pierwszego wystąpienia w pliku. Jeśli plik nie zawiera słów, ta część jest pusta.

Przypadki szczególne (wypisz tylko komunikat):

  • Plik jest pusty. — jeśli plik nie zawiera żadnego znaku,
  • Plik nie istnieje. — jeśli podana ścieżka nie wskazuje istniejącego pliku.

Uwagi

  • Słowa łatwo wyodrębnić, zamieniając każdy znak, który nie jest literą (znak.isalpha()), na spację, a potem dzieląc wiersz metodą split().
  • Słownik w Pythonie pamięta kolejność dodawania kluczy.

Przykład

Pliki przed uruchomieniem
  • tekst.txt
    Ala ma kota.
    Kot ma na imię Filemon.
    Filemon lubi mleko, Ala lubi
    kota Filemona!
Wejście
tekst.txt
Wyjście
4
15
19.25
3.75
ala: 2
ma: 2
kota: 2
kot: 1
na: 1
imię: 1
filemon: 2
lubi: 2
mleko: 1
filemona: 1

Wiersze mają 12, 23, 28 i 14 znaków, więc średnia długość to $\frac{77}{4} = 19.25$, a średnia liczba słów to $\frac{15}{4} = 3.75$.

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
kot.txt
Oczekiwane wyjście
2
10
20.00
5.00
ala: 2
ma: 2
kota: 1
a: 1
kot: 1
alę: 1
lubi: 1
koty: 1
Pliki przed uruchomieniem
  • kot.txt
    Ala ma kota, a kot ma Alę.
    Ala lubi koty.

Test 2

Nie uruchomiono
Wejście
dane/zdania.txt
Oczekiwane wyjście
2
6
15.00
3.00
mark: 1
up: 1
r: 1
to: 1
słowa: 1
tak: 1
Pliki przed uruchomieniem
  • dane/zdania.txt
    Mark-up 2024r. to 3 słowa?
    Tak!

Test 3

Nie uruchomiono
Wejście
odstep.txt
Oczekiwane wyjście
3
4
9.33
1.33
pierwszy: 1
wiersz: 2
trzeci: 1
Pliki przed uruchomieniem
  • odstep.txt
    Pierwszy wiersz
    
    Trzeci wiersz

Test 4

Nie uruchomiono
Wejście
jeden.txt
Oczekiwane wyjście
1
3
17.00
3.00
zażółć: 1
gęślą: 1
jaźń: 1
Pliki przed uruchomieniem
  • jeden.txt
    Zażółć gęślą jaźń

Test 5

Nie uruchomiono
Wejście
wielkie.txt
Oczekiwane wyjście
1
4
15.00
4.00
ala: 4
Pliki przed uruchomieniem
  • wielkie.txt
    ALA Ala ala aLa

Test 6

Nie uruchomiono
Wejście
liczby.txt
Oczekiwane wyjście
2
0
5.00
0.00
Pliki przed uruchomieniem
  • liczby.txt
    123 456
    !!!

Test 7

Nie uruchomiono
Wejście
pusty.txt
Oczekiwane wyjście
Plik jest pusty.
Pliki przed uruchomieniem
  • pusty.txt(pusty plik)

Test 8

Nie uruchomiono
Wejście
tekst.txt
Oczekiwane wyjście
Plik nie istnieje.
Pliki przed uruchomieniem
  • dane/tekst.txt
    Ala ma kota.
Uruchom z własnymi danymi