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

Özel Kopyala alıştırması, Python Yardımcı Programları bölümündeki dosya sistemi ve harici komutlar materyaline uygundur. Bu alıştırma "copy özel" bölümünde google-python-exercises dizinine ekleyin (önceden indirmediyseniz google-python-exercises.zip dosyasını indirin ve ayrıntılar için Kurulum'a bakın). Kodunuzu kopyalayıp private.py adresine ekleyin.

Copyprivate.py programı, bağımsız değişkeni olarak bir veya daha fazla dizini alır. "Özel" diyelim. dosyası, adın bir yerde __w__ kalıbını içerdiği ve w harfinin bir veya daha fazla kelime karakteri olduğu durumlardan biridir. Sağlanan main(), komut satırı bağımsız değişkenlerini ayrıştırmak için kod içerir ancak gerisi size kalmıştır. Aşağıdaki özellikleri uygulamak için işlevler 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ğıdadır):

  • get_custom_paths(dir) - Belirli bir dizindeki özel dosyaların mutlak yollarının bir listesini döndürür
  • "copy_to(paths, dir)" için yol listesi belirtildiğinde, bu dosyaları belirtilen dizine kopyalar
  • zip_to(paths, zippath) olarak belirtilen yolların listesini ifade eder, bu dosyaları belirtilen zip dosyasına sıkıştırır

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, o listeyi yazdırmanız yeterlidir (burada, komuttan sonraki "." ifadesi, 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 dizinlerde tekrarlanmadığını varsayacağız (isteğe bağlı: varsayımı kontrol edin ve ihlal edildiyse hata alın).

B Bölümü (dosya kopyalama)

"--todir dir" seçeneği komut satırının başında mevcutsa hiçbir şey yazdırmayın. Bunun yerine, dosyaları belirtilen dizine kopyalayıp gerekirse oluşturun. "shutil" python modülünü kullanma .

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

C Bölümü (harici programa çağrı yapma)

"--tozip zipfile" seçeneği varsa şu komutu çalıştırın: "zip -j zipfile <list all the files>". Bu işlem, dosyaları içeren bir ZIP dosyası oluşturur. Sadece eğlenmek/güvence vermek için, ilk önce yapacağınız komut satırını da yazdırın (derste gösterildiği gibi). (Windows notu: Windows, varsayılan olarak standart .zip arşivlerini oluşturacak bir program içermez, ancak ücretsiz ve açık zip programını www.info-zip.org adresinden indirebilirsiniz.) Linux kullanıcıları için zip uygulaması yüklü değilse sudo apt install zip numaralı telefonu arayarak yükleyebilir .

$ ./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 hata koduyla çıkıyorsa 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)