Modyfikacja plików spełniających warunek (rekurencyjnie)
Treść zadania
Wczytaj ścieżkę folderu i inicjały (np. A.D.). W tym folderze i wszystkich jego podfolderach:
a) do każdego pliku .txt dopisz inicjały jako nowy, ostatni wiersz,
b) z każdego pliku .csv usuń środkowy wiersz — gdy liczba wierszy jest parzysta, usuń dolny z dwóch środkowych.
Pozostałych plików nie zmieniaj. Na koniec wypisz ścieżki wszystkich zmienionych plików.
Szczegóły:
- Wiersze liczymy jak w
str.splitlines(): znak nowej linii na końcu pliku nie tworzy dodatkowego, pustego wiersza. - Inicjały trafiają bezpośrednio pod dotychczasowy ostatni wiersz, bez pustego wiersza pomiędzy — także wtedy, gdy plik nie kończy się znakiem nowej linii. Pusty plik
.txtpo zmianie zawiera tylko inicjały. - W pliku
.csvo $n$ wierszach usuwamy wiersz numer $\lfloor n/2 \rfloor + 1$ (licząc od 1): przy 3 wierszach — 2., przy 4 — 3., przy 1 — jedyny wiersz.
Dane wejściowe
- 1. linia: ścieżka folderu
- 2. linia: inicjały
Dane wyjściowe
- Ścieżki zmienionych plików względem podanego folderu, każda w osobnej linii, posortowane rosnąco.
Brak plików.— jeśli nie ma żadnego pliku.txtani.csv.Folder nie istnieje.— jeśli podana ścieżka nie wskazuje istniejącego folderu.
Ograniczenia
- Każdy plik
.csvma co najmniej jeden wiersz.
Uwagi
- Najpierw zbierz listę wszystkich plików (np.
sorted(Path(folder).rglob("*"))), a dopiero potem je zmieniaj.
Przykład
projekt/2024/raport.txtRaport roczny
projekt/2024/wyniki.csvx,1 y,2 z,3 w,4
projekt/dane.csva,1 b,2 c,3
projekt/main.pyprint("Projekt X")projekt/opis.txtProjekt X
projekt A.D.
2024/raport.txt 2024/wyniki.csv dane.csv opis.txt
projekt/2024/raport.txtRaport roczny A.D.
projekt/2024/wyniki.csvx,1 y,2 w,4
projekt/dane.csva,1 c,3
projekt/main.pyprint("Projekt X")projekt/opis.txtProjekt X A.D.
dane.csv ma 3 wiersze, więc traci 2. wiersz; wyniki.csv ma 4 wiersze, więc traci 3. wiersz. Plik main.py się nie zmienia.
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 uruchomionopraca J.K.
dane.csv opis.txt rozdzial1/tabela.csv rozdzial1/tekst.txt
praca/dane.csvid,wynik 1,10 2,20
praca/opis.txtOpis pracy
praca/rozdzial1/tabela.csva b c d e f
praca/rozdzial1/tekst.txtWstęp Treść
praca/skrypt.pyprint(1)
praca/dane.csvid,wynik 2,20
praca/opis.txtOpis pracy J.K.
praca/rozdzial1/tabela.csva b c e f
praca/rozdzial1/tekst.txtWstęp Treść J.K.
praca/skrypt.pyprint(1)
Test 2
Nie uruchomionof X
dwa.csv jeden.csv pusty.txt
f/dwa.csvpierwszy drugi
f/jeden.csvtylko,ten
f/pusty.txt
f/dwa.csvpierwszy
f/jeden.csvf/pusty.txtX
Test 3
Nie uruchomionodok A.N.
RAPORT.TXT dane.CSV
dok/RAPORT.TXTRaport
dok/arkusz.xlsxbin
dok/dane.CSV1 2 3 4 5
dok/notatki.txt.bakkopia
dok/RAPORT.TXTRaport A.N.
dok/arkusz.xlsxbin
dok/dane.CSV1 2 4 5
dok/notatki.txt.bakkopia
Test 4
Nie uruchomionow Z.Z.
y.txt
w/y.txtw środku
x.txtpoza
w/y.txtw środku Z.Z.
x.txtpoza
Test 5
Nie uruchomionokod A.D.
Brak plików.
kod/lib/util.pyy
kod/main.pyx
kod/lib/util.pyy
kod/main.pyx
Test 6
Nie uruchomionoprojekty A.D.
Folder nie istnieje.
projekt/a.txta
projekt/a.txta