Özel Python Alıştırmasını Kopyala

Özel Kopyalama alıştırması, Python Yardımcı Programları bölümündeki dosya sistemi ve harici komutlar materyaline uygundur. Bu alıştırma, google-python-exercises içindeki "copyspecial" dizinindedir (daha önce yapmadıysanız google-python-exercises.zip dosyasını indirin, ayrıntılı bilgi için Kurulum bölümünü inceleyin). Kodunuzu copyspecial.py içine ekleyin.

copyspecial.py programı, bağımsız değişken olarak bir veya daha fazla dizin alır. "Özel" dosyanın, bir yerde __w__ kalıbını içerdiği, w harfinin bir veya daha fazla kelime olduğu bir dosya olduğunu söyleyelim. Sağlanan main(), komut satırı bağımsız değişkenlerini ayrıştıracak bir kod içerir, ancak gerisi size bağlıdır. Aşağıdaki özellikleri uygulamak için fonksiyonlar yazın ve işlevlerinizi çağırmak için main() işlevini değiştirin.

Çözümünüz için önerilen işlevler(ayrıntılar aşağıda verilmiştir):

  • get_special_paths(dir) -- Belirli bir dizindeki özel dosyaların mutlak yollarının bir listesini döndürür
  • yol listesi verilen copy_to(paths, dir) değerine sahiptir, bu dosyaları belirtilen dizine kopyalar
  • zip_to(yollar, zippath) yolunu izleyin, bu dosyaları belirtilen zip dosyasında sıkıştırın

A Bölümü (dosya yollarını değiştirme)

Tüm dizinlerdeki özel dosyaların mutlak yollarının bir listesini toplayın. En basit durumda bu listeyi yazdırın (burada komuttan sonra gelen "." işareti, geçerli dizini gösteren tek bir bağımsız değişkendir). Her satıra bir mutlak yol yazdır.

$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

Adların tüm dizinlerde tekrarlanmadığını varsayacağız (isteğe bağlı: Varsayı kontrol edin ve ihlal edip etmediğine bakın).

B Bölümü (dosya kopyalama)

Komut satırının başında "--todir dir" seçeneği varsa hiçbir şeyi yazdırmayın. Bunun yerine, dosyaları belirtilen dizine kopyalayıp gerekirse oluşturun. Dosya kopyalama için "shutil" python modülünü kullanın.

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

C Bölümü (harici bir programı çağırma)

Komut satırının başında "--tozip zipfile" seçeneği mevcutsa şu komutu çalıştırın: "zip -j zipfile <list all the files>". Bu komut dosyaları içeren bir zip dosyası oluşturur. Eğlence ve güvence için, ilk olarak kullanacağınız komut satırını da (derste gösterildiği gibi) yazdırın. (Windows notu: Windows'da varsayılan olarak standart .zip arşivleri oluşturan bir program yoktur, ancak ücretsiz ve açık zip programını www.info-zip.org adresinden indirebilirsiniz.) Linux kullanıcıları cihazınızda zip yüklü değilse sudo apt install zip yöntemini çağırarak yükleyebilirsiniz .

$ ./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

Alt işlem bir hata koduyla çıkarsa hata koduyla çıkın ve komutun çıkışını yazdırın. Var olmayan bir dizine bir zip dosyası yazmaya çalışarak bunu test edin.

$ ./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)