Skopiuj pliki PNG do innego folderu (bez podfolderów)

Zadanie 10 z 15 · rozdział 20Trudność: 1 z 3filescopypngshutil

Treść zadania

Wczytaj ścieżkę folderu źródłowego i docelowego. Skopiuj do folderu docelowego wszystkie pliki z rozszerzeniem .png (bez względu na wielkość liter), które leżą bezpośrednio w folderze źródłowym. Pliki w podfolderach pomiń.

  • Pliki w folderze źródłowym zostają na miejscu.
  • Jeśli folder docelowy nie istnieje, utwórz go (razem z brakującymi folderami nadrzędnymi). Gdy nie ma czego kopiować, nie ma znaczenia, czy go utworzysz.
  • Jeśli w folderze docelowym jest już plik o tej samej nazwie, nadpisz go.

Dane wejściowe

  • 1. linia: ścieżka folderu źródłowego
  • 2. linia: ścieżka folderu docelowego

Dane wyjściowe

  • Nazwy skopiowanych plików, każda w osobnej linii, posortowane rosnąco.
  • Brak plików. — jeśli w folderze źródłowym nie ma żadnego pliku .png.
  • Folder nie istnieje. — jeśli folder źródłowy nie istnieje. Wtedy niczego nie twórz.

Uwagi

  • Kopiowanie: shutil.copy(zrodlo, cel). Folder razem z folderami nadrzędnymi tworzy os.makedirs(sciezka, exist_ok=True).

Przykład

Pliki przed uruchomieniem
  • obrazy/kot.png
    (obraz kota)
  • obrazy/opis.txt
    Zdjęcia zwierząt
  • obrazy/pies.PNG
    (obraz psa)
  • obrazy/wakacje/morze.png
    (obraz morza)
Wejście
obrazy
kopia/obrazy
Wyjście
kot.png
pies.PNG
Pliki po uruchomieniu
  • kopia/obrazy/kot.png
    (obraz kota)
  • kopia/obrazy/morze.png(usunięty)
  • kopia/obrazy/opis.txt(usunięty)
  • kopia/obrazy/pies.PNG
    (obraz psa)
  • obrazy/kot.png
    (obraz kota)
  • obrazy/pies.PNG
    (obraz psa)

Program utworzył folder kopia/obrazy. Pliku wakacje/morze.png nie kopiujemy, bo leży w podfolderze.

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
grafiki
eksport
Oczekiwane wyjście
baner.png
logo.png
Pliki przed uruchomieniem
  • eksport/(katalog)
  • grafiki/baner.png
    BANER
  • grafiki/logo.png
    LOGO
  • grafiki/opis.txt
    opis
  • grafiki/stare/ikona.png
    IKONA
Pliki po uruchomieniu
  • eksport/baner.png
    BANER
  • eksport/ikona.png(usunięty)
  • eksport/logo.png
    LOGO
  • eksport/opis.txt(usunięty)
  • eksport/stare/ikona.png(usunięty)
  • grafiki/baner.png
    BANER
  • grafiki/logo.png
    LOGO

Test 2

Nie uruchomiono
Wejście
zdjecia
backup/2024/zdjecia
Oczekiwane wyjście
A.PNG
b.png
Pliki przed uruchomieniem
  • zdjecia/A.PNG
    a
  • zdjecia/b.png
    b
  • zdjecia/c.jpg
    c
Pliki po uruchomieniu
  • backup/2024/zdjecia/A.PNG
    a
  • backup/2024/zdjecia/b.png
    b
  • backup/2024/zdjecia/c.jpg(usunięty)
  • zdjecia/A.PNG
    a
  • zdjecia/b.png
    b

Test 3

Nie uruchomiono
Wejście
src
dst
Oczekiwane wyjście
logo.png
Pliki przed uruchomieniem
  • dst/inne.png
    inne
  • dst/logo.png
    stare logo
  • src/logo.png
    nowe logo
Pliki po uruchomieniu
  • dst/inne.png
    inne
  • dst/logo.png
    nowe logo
  • src/logo.png
    nowe logo

Test 4

Nie uruchomiono
Wejście
moje zdjęcia
kopia zapasowa
Oczekiwane wyjście
wakacje 1.png
wakacje 2.png
Pliki przed uruchomieniem
  • moje zdjęcia/wakacje 1.png
    w1
  • moje zdjęcia/wakacje 2.png
    w2
Pliki po uruchomieniu
  • kopia zapasowa/wakacje 1.png
    w1
  • kopia zapasowa/wakacje 2.png
    w2

Test 5

Nie uruchomiono
Wejście
obrazy
kopia
Oczekiwane wyjście
Brak plików.
Pliki przed uruchomieniem
  • obrazy/a.jpg
    x
  • obrazy/b.png.txt
    y
  • obrazy/c.png/d.txt
    z
Pliki po uruchomieniu
  • kopia/a.jpg(usunięty)
  • kopia/b.png.txt(usunięty)
  • kopia/c.png/d.txt(usunięty)
  • kopia/d.txt(usunięty)

Test 6

Nie uruchomiono
Wejście
zdjecia
kopia
Oczekiwane wyjście
Folder nie istnieje.
Pliki przed uruchomieniem
  • obrazy/a.png
    x
Pliki po uruchomieniu
  • kopia/a.png(usunięty)
  • obrazy/a.png
    x
Uruchom z własnymi danymi