Statystyki pliku tekstowego
Treść zadania
Wczytaj ścieżkę pliku tekstowego i oblicz:
- liczbę wierszy,
- łączną liczbę słów,
- średnią długość wiersza (w znakach),
- średnią liczbę słów w wierszu,
- 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łowaMark,upir. - Licząc wystąpienia, nie rozróżniaj wielkości liter:
Alaialato 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
tekst.txtAla ma kota. Kot ma na imię Filemon. Filemon lubi mleko, Ala lubi kota Filemona!
tekst.txt
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$.
Potrzebujesz teorii?
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.gzma rozszerzenie.gz. Rozszerzenia porównuj bez względu na wielkość liter (.TXTto 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 funkcjasorted(). 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.
Przywrócono Twój zapisany kod.
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 uruchomionokot.txt
2 10 20.00 5.00 ala: 2 ma: 2 kota: 1 a: 1 kot: 1 alę: 1 lubi: 1 koty: 1
kot.txtAla ma kota, a kot ma Alę. Ala lubi koty.
Test 2
Nie uruchomionodane/zdania.txt
2 6 15.00 3.00 mark: 1 up: 1 r: 1 to: 1 słowa: 1 tak: 1
dane/zdania.txtMark-up 2024r. to 3 słowa? Tak!
Test 3
Nie uruchomionoodstep.txt
3 4 9.33 1.33 pierwszy: 1 wiersz: 2 trzeci: 1
odstep.txtPierwszy wiersz Trzeci wiersz
Test 4
Nie uruchomionojeden.txt
1 3 17.00 3.00 zażółć: 1 gęślą: 1 jaźń: 1
jeden.txtZażółć gęślą jaźń
Test 5
Nie uruchomionowielkie.txt
1 4 15.00 4.00 ala: 4
wielkie.txtALA Ala ala aLa
Test 6
Nie uruchomionoliczby.txt
2 0 5.00 0.00
liczby.txt123 456 !!!
Test 7
Nie uruchomionopusty.txt
Plik jest pusty.
pusty.txt
Test 8
Nie uruchomionotekst.txt
Plik nie istnieje.
dane/tekst.txtAla ma kota.