Przenieś wszystkie pliki CSV do jednego folderu (rekurencyjnie)
Treść zadania
Wczytaj ścieżkę folderu źródłowego i docelowego. Przenieś wszystkie pliki z rozszerzeniem .csv (bez względu na wielkość liter) z folderu źródłowego i wszystkich jego podfolderów bezpośrednio do folderu docelowego, zachowując ich nazwy.
- Po przeniesieniu pliku nie ma już w starym miejscu. Foldery zostają, nawet jeśli staną się puste.
- Jeśli folder docelowy nie istnieje, utwórz go (razem z brakującymi folderami nadrzędnymi). Gdy nie ma czego przenosić, nie ma znaczenia, czy go utworzysz.
Dane wejściowe
- 1. linia: ścieżka folderu źródłowego
- 2. linia: ścieżka folderu docelowego
Dane wyjściowe
- Dawne ścieżki przeniesionych plików względem folderu źródłowego, każda w osobnej linii, posortowane rosnąco.
Brak plików.— jeśli nie ma żadnego pliku.csv.Folder nie istnieje.— jeśli folder źródłowy nie istnieje. Wtedy niczego nie twórz.
Ograniczenia
- Nazwy plików
.csvw całym folderze źródłowym są różne, a w folderze docelowym nie ma plików o takich nazwach. - Folder docelowy nie leży wewnątrz folderu źródłowego.
Uwagi
- Plik przenosi
shutil.move(zrodlo, cel)alboPath.rename(cel).
Przykład
projekt/2023/q1/luty.CSV2,95
projekt/2023/styczeń.csv1,120
projekt/dane.csvid,wartość 1,10
projekt/opis.txtDane sprzedaży
projekt wyniki/csv
2023/q1/luty.CSV 2023/styczeń.csv dane.csv
projekt/2023/q1/luty.CSVprojekt/2023/styczeń.csvprojekt/dane.csvprojekt/opis.txtDane sprzedaży
wyniki/csv/dane.csvid,wartość 1,10
wyniki/csv/luty.CSV2,95
wyniki/csv/styczeń.csv1,120
Program utworzył folder wyniki/csv i przeniósł do niego trzy pliki; opis.txt został na miejscu.
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 uruchomionodane csv
2023/styczen.csv 2024/q1/luty.CSV sprzedaz.csv
csv/dane/2023/opis.txtopis
dane/2023/styczen.csv1,2
dane/2024/q1/luty.CSV3,4
dane/sprzedaz.csva,b
csv/luty.CSV3,4
csv/opis.txtcsv/sprzedaz.csva,b
csv/styczen.csv1,2
dane/2023/opis.txtopis
dane/2023/styczen.csvdane/2024/q1/luty.CSVdane/sprzedaz.csv
Test 2
Nie uruchomionosrc wyniki/csv
a.csv b.csv
src/a.csvx
src/b.csvy
src/a.csvsrc/b.csvwyniki/csv/a.csvx
wyniki/csv/b.csvy
Test 3
Nie uruchomionosrc dst
x/nowy.csv
dst/stary.csvs
src/x/nowy.csvn
dst/nowy.csvn
dst/stary.csvs
src/x/nowy.csv
Test 4
Nie uruchomionoa b
plik.csv
a/plik.csv1
b/plik2.csv2
a/plik.csvb/plik.csv1
b/plik2.csv2
Test 5
Nie uruchomionodane csv
Brak plików.
dane/a.txtx
dane/b.csv.baky
dane/c.csv/plik.txtz
csv/b.csv.bakcsv/c.csv/plik.txtdane/a.txtx
dane/b.csv.baky
dane/c.csv/plik.txtz
Test 6
Nie uruchomionoprojekty csv
Folder nie istnieje.
dane/a.csvx
csv/a.csvdane/a.csvx