Ćwiczenie Copy Special obejmuje system plików i materiały poleceń zewnętrznych w sekcji Python Utilities (Narzędzia narzędziowe w języku Python). To ćwiczenie jest w sekcji w katalogu google-python-exercises (pobierz plik google-python-exercises.zip, jeśli jeszcze go nie masz, w sekcji Konfiguracja dowiesz się, jak to zrobić). Dodaj kod w pliku copyspecific.py.
Program copySpecial.py używa jako argumentów jednego lub kilku katalogów. Powiedzmy, że „specjalny” to plik, w którym nazwa zawiera wzorzec __w__, gdzie „w” to znak co najmniej jednego słowa. Podana funkcja main() zawiera kod analizujący argumenty wiersza poleceń, ale reszta zależy od Ciebie. Napisz funkcje do ich zaimplementowania, a potem zmień main(), aby je wywoływać.
Sugerowane funkcje dla Twojego rozwiązania(szczegóły poniżej):
- get_Special_paths(dir) -- zwraca listę ścieżek bezwzględnych do plików specjalnych w danym katalogu.
- copy_to(paths, dir) z podaną listą ścieżek powoduje skopiowanie tych plików do podanego katalogu
- zip_to(paths, zippath) z listą ścieżek, skompresuj te pliki do wybranego pliku ZIP
Część A (manipulowanie ścieżkami plików)
Utwórz listę bezwzględnych ścieżek do plików specjalnych we wszystkich katalogach. W najprostszym przypadku wydrukuj po prostu tę listę (tutaj „.” po poleceniu to pojedynczy argument wskazujący bieżący katalog). Drukuj jedną ścieżkę bezwzględną na wiersz.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
Zakładamy, że nazwy nie powtarzają się w katalogach (opcjonalnie: sprawdź to założenia i usuń błędy, jeśli zostaną naruszone).
Część B (kopiowanie plików)
Jeśli parametr „--todir dir” znajduje się na początku wiersza poleceń, nie drukuj niczego, tylko skopiuj pliki do danego katalogu (w razie potrzeby je utwórz). Użyj modułu Pythona „shutil”. w celu skopiowania plików.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
Część C (wywoływanie programu zewnętrznego)
Jeśli plik zip „--tozip” znajduje się na początku wiersza poleceń, uruchom to polecenie: „zip -j zipfile <wymień wszystkie pliki>”. Spowoduje to utworzenie pliku ZIP z tymi plikami. Dla ułatwienia wydrukuj też wiersz poleceń, który zamierzasz wykonać najpierw (jak pokazano w wykładzie). (Uwaga dla systemu Windows: system Windows nie zawiera domyślnie programu do tworzenia standardowych archiwów ZIP, ale możesz pobrać bezpłatny i otwarty program do obsługi plików ZIP ze strony www.info-zip.org).
W przypadku użytkowników Linuksa, jeśli nie mają zainstalowanej aplikacji zip
,
można ją zainstalować, wywołując sudo apt install zip
.
$ ./copyspecial.py --tozip tmp.zip .Command I'm going to do:zip -j tmp.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
Jeśli proces podrzędny zakończy się z kodem błędu, zakończ działanie z kodem błędu i wydrukuj dane wyjściowe polecenia. Przetestuj to, zapisując plik ZIP w katalogu, który nie istnieje.
$ ./copyspecial.py --tozip /no/way.zip .Command I'm going to do:zip -j /no/way.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
zip I/O error: No such file or directory zip error: Could not create output file (/no/way.zip)