Python'da .zip oluşturun? | tutuappapks.com
Komut dizimde belirli bir kaynak dizininin içeriğini gösteren bir işlev oluşturmaya çalışıyorum (src) bir zip dosyasına (dst). Örneğin, zip('/path/to/dir', '/path/to/file.zip'), nerede /path/to/dir bir dizin ve /path/to/file.zip henüz mevcut değil. ben yapma dizinin kendisini sıkıştırmak istiyorum, bu benim durumumdaki tüm farkları yaratıyor. Dizindeki dosyaları (ve alt dizinleri) sıkıştırmak istiyorum. Denediğim şey bu:
Bu aslında bir zip oluşturur /. Örneğin, sıkıştırılmış olsaydım /path/to/dir, zip'i ayıklamak, içinde "yol" olan bir dizini, bu dizinde "to" ile, vb. oluşturur.
Kimsenin bu soruna neden olmayan bir işlevi var mı?
Bunu yeterince strese atamıyorum. ihtiyaçlar dizindeki dosyaları sıkıştırmak için, direktörlüğün kendisi değil.
Olası kopya Bir dizinin bir zip arşivi nasıl oluşturulur - BuZZ-dEE
zipfile.write() yöntem isteğe bağlı alır arcname tartışma dosyanın isminin zip dosyasında olması gerektiğini belirtir.
Bu yolu kaldırmak için kullanabilirsiniz src başlangıçta. İşte ben kullanım os.path.abspath() ikisinden de emin olmak için src ve dosya adı tarafından döndürüldü os.walk() ortak bir önek var.
Böyle bir dizin yapısı ile:
Ve sonuçta elde edilen zip dosyasının içeriği:
Umut verici görünüyor (DÜZENLEME: mükemmel çalışıyor), ama ithal etmek için herhangi bir sebep var mı os ve os.path? - tkbx
Evet-os için os.walk(), ve os.path için os.path.abspath() ve os.path.join(). - andrewdotn
@andrew senin erişimin var os.path ayrı olarak ithal etmeden. Bunu yapmanın asıl nedeni, şunun gibi yeniden adlandırırsanız import os.path as P ya da her neyse. - agoebel
@tkbx: from os import path koyar path en üst düzeyde, böylece yapabilirsin path.join yerine os.path.join. Bu genellikle yapmak istediğiniz şey değildir (özellikle herkesin her zaman bir değişkene sahip olduğu için) path kodlarında bir yere). - abarnert
Bu işlev iyi çalışır, ancak çoğu durumda beklenen davranış olan boş dosyaya zip dosyasına eklenmez. Başka bir deyişle, içinde dosya bulunmayan herhangi bir alt klasör göz ardı edilir. - bobyuan
Kullan arcname parametre zip dosyasındaki adı / yolu denetlemek için.
Örneğin, yalnızca dosyaları içeren bir zip dosyası için dizin yok:
Veya zip dosyasının içinde yeni bir dizin icat etmek için:
Sana söyleyebildiğim kadar yakın. Kullanabilirsin dirname ve basename Doğru yol adını tuttuğunuzdan emin olmak için:
Sonra kullanarak chdir Ebeveynler içinde olduğundan emin olabilirsiniz, böylece yollar görecelidir.
Eğer "dst" ismini eklemek istemezseniz os.chdir(dst) ve sonra os.walk('.').
Lütfen bunu not al zip aynı zamanda çok farklı amaçlarla yerleşik bir işlevdir: docs.python.org/2/library/functions.html#zip - Matteo T.