Skopiuj specjalne ćwiczenie w Pythonie

Ćwiczenie specjalne obejmuje badanie systemu plików i poleceń zewnętrznych w sekcji Python Utilities (Narzędzia w języku Python). To ćwiczenie znajduje się w katalogu „copyspecial” w google-python-exercises (pobierz plik google-python-exercises.zip, jeśli jeszcze go nie masz w sekcji Konfiguracja). Dodaj kod w pliku copyspecial.py.

Program copyspecial.py przyjmuje jako argumenty co najmniej jeden katalog. Zapisujemy, że plik „specjalny” zawiera ciąg znaków „__w__”, gdzie „W” to znak co najmniej jednego słowa. Podana funkcja main() zawiera kod do analizowania argumentów wiersza poleceń, ale reszta zależy od Ciebie. Utwórz funkcje implementujące poniższe funkcje, a następnie zmodyfikuj metodę main(), aby wywołała Twoje funkcje.

Sugerowane funkcje dla Twojego rozwiązania(szczegóły poniżej):

  • get_special_paths(dir) – zwraca listę bezwzględnych ścieżek do plików specjalnych w danym katalogu.
  • copy_to(paths, dir) zawierające listę ścieżek, kopiuje pliki do danego katalogu
  • zip_to(paths, zippath) z podaną listą ścieżek, spakuj te pliki do danego pliku ZIP

Część A (zmienianie ścieżek do plików)

Zbierz listę bezwzględnych ścieżek do plików specjalnych we wszystkich katalogach. W najprostszym przypadku po prostu wydrukuj tę listę (znak „.” po poleceniu to pojedynczy argument wskazujący bieżący katalog). Drukuj jedną ścieżkę bezwzględną w każdym wierszu.

$ ./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żenie i wyeliminuj błędy, jeśli zostały naruszone).

Część B (kopiowanie plików)

Jeśli na początku wiersza poleceń znajduje się opcja „--todir dir”, nie drukuj niczego, tylko skopiuj pliki do danego katalogu i w razie potrzeby go utwórz. Do kopiowania plików użyj modułu „shutil” Pythona.

$ ./copyspecial.py --todir /tmp/fooby .
$ ls /tmp/fooby
xyz__hello__.txt        zz__something__.jpg

Część C (nawiązywanie połączenia z programem zewnętrznym)

Jeśli na początku wiersza poleceń znajduje się opcja „--tozip zipfile”, uruchom następujące polecenie: „zip -j zipfile <list all the files>”. Spowoduje to utworzenie pliku zip zawierającego te pliki. Dla rozrywki – dla rozrywki – też wydrukuj wiersz poleceń, które zamierzasz wykonać w pierwszej kolejności (jak pokazano na wykładzie). (Uwaga dla systemu Windows: w przypadku okien nie ma programu do tworzenia standardowych archiwów ZIP, ale możesz pobrać bezpłatny i otwarty program ZIP ze strony www.info-zip.org). W przypadku systemu Linux, jeśli nie masz zainstalowanej aplikacji zip, możesz 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 działanie z kodem błędu, zakończ działanie z kodem błędu i wydrukuj dane wyjściowe polecenia. Sprawdź to, próbując zapisać 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)