Skopiuj specjalne ćwiczenie w Pythonie

Ć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)