Usuń pliki większe niż 10 kB (rekurencyjnie)

Zadanie 9 z 15 · rozdział 20Trudność: 2 z 3filesdeletesizerecursive

Treść zadania

Wczytaj ścieżkę folderu. Usuń wszystkie pliki większe niż 10 kB, czyli o rozmiarze większym niż 10240 bajtów, z tego folderu i wszystkich jego podfolderów. Pliki o rozmiarze dokładnie 10240 bajtów zostają. Foldery zostają, nawet jeśli staną się puste.

Rozmiar to liczba bajtów na dysku, a nie liczba znaków w pliku — w kodowaniu UTF-8 litera ą zajmuje 2 bajty.

Dane wejściowe

  • 1. linia: ścieżka folderu

Dane wyjściowe

  • Ścieżki usuniętych plików względem podanego folderu, każda w osobnej linii, posortowane rosnąco.
  • Brak plików. — jeśli żaden plik nie został usunięty.
  • Folder nie istnieje. — jeśli podana ścieżka nie wskazuje istniejącego folderu.

Uwagi

  • Rozmiar pliku w bajtach zwraca os.path.getsize() albo Path.stat().st_size, a plik usuwa os.remove() albo Path.unlink().

Przykład

Pliki przed uruchomieniem
  • pobrane/film.mp4(50000 B)
  • pobrane/notatka.txt(300 B)
  • pobrane/obrazy/duże.png(10241 B)
  • pobrane/obrazy/ikona.png(10240 B)
Wejście
pobrane
Wyjście
film.mp4
obrazy/duże.png
Pliki po uruchomieniu
  • pobrane/film.mp4(usunięty)
  • pobrane/notatka.txt(300 B)
  • pobrane/obrazy/duże.png(usunięty)
  • pobrane/obrazy/ikona.png(10240 B)

ikona.png ma dokładnie 10240 bajtów, więc zostaje.

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
dane
Oczekiwane wyjście
duzy.bin
obrazy/zdjecie.jpg
Pliki przed uruchomieniem
  • dane/duzy.bin(12000 B)
  • dane/maly.txt
    abc
  • dane/obrazy/ikona.png(500 B)
  • dane/obrazy/zdjecie.jpg(20000 B)
  • inny.bin(30000 B)
Pliki po uruchomieniu
  • dane/duzy.bin(usunięty)
  • dane/maly.txt
    abc
  • dane/obrazy/ikona.png(500 B)
  • dane/obrazy/zdjecie.jpg(usunięty)
  • inny.bin(30000 B)

Test 2

Nie uruchomiono
Wejście
pliki
Oczekiwane wyjście
o_jeden_wiecej.txt
Pliki przed uruchomieniem
  • pliki/dokladnie.txt(10240 B)
  • pliki/o_jeden_wiecej.txt(10241 B)
Pliki po uruchomieniu
  • pliki/dokladnie.txt(10240 B)
  • pliki/o_jeden_wiecej.txt(usunięty)

Test 3

Nie uruchomiono
Wejście
tekst
Oczekiwane wyjście
polski.txt
Pliki przed uruchomieniem
  • tekst/ascii.txt(6000 B)
  • tekst/krotki.txt(10240 B)
  • tekst/polski.txt(10242 B)
Pliki po uruchomieniu
  • tekst/ascii.txt(6000 B)
  • tekst/krotki.txt(10240 B)
  • tekst/polski.txt(usunięty)

Test 4

Nie uruchomiono
Wejście
a/b
Oczekiwane wyjście
c/d/stary_log.txt
Pliki przed uruchomieniem
  • a/b/c/d/stary_log.txt(50000 B)
  • a/b/nowy_log.txt(10000 B)
  • a/duzy.bin(11000 B)
Pliki po uruchomieniu
  • a/b/c/d/stary_log.txt(usunięty)
  • a/b/nowy_log.txt(10000 B)
  • a/duzy.bin(11000 B)

Test 5

Nie uruchomiono
Wejście
male
Oczekiwane wyjście
Brak plików.
Pliki przed uruchomieniem
  • male/a.txt
    a
  • male/b/c.txt(10240 B)
Pliki po uruchomieniu
  • male/a.txt
    a
  • male/b/c.txt(10240 B)

Test 6

Nie uruchomiono
Wejście
puste
Oczekiwane wyjście
Brak plików.
Pliki przed uruchomieniem
  • puste/(katalog)

Test 7

Nie uruchomiono
Wejście
inne
Oczekiwane wyjście
Folder nie istnieje.
Pliki przed uruchomieniem
  • dane/a.txt(20000 B)
Pliki po uruchomieniu
  • dane/a.txt(20000 B)
Uruchom z własnymi danymi