ile bir zip dosyasında bir dizinde var olup olmadığını kontrol edin Başlangıçta os.path.isdir
kullanmayı düşünüyordum ama bunun zip dosyaları için işe yaramadığını düşünmüyorum. Zip dosyasına göz atmanın ve bu dizinin var olduğunu doğrulamanın bir yolu var mı? Mümkün olduğunca unzip -l "[email protected]"
'u kullanmayı önlemek istiyorum, ancak tek çözüm bu ise sanırım başka seçeneğim yok.Python
Python
cevap
Dosya adını, sonunda "/" ile kontrol edin. o arşiv hiçbir dizini açıkça içerdiğini mümkündür çünkü
import zipfile
def isdir(z, name):
return any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())
f = zipfile.ZipFile("sample.zip", "r")
print isdir(f, "a")
print isdir(f, "a/b")
print isdir(f, "a/X")
Bu çizgiyi
any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())
kullanın; sadece bir dizin ismi olan bir yol.
Yürütme sonucu: Sen yerleşik kütüphane zipfile kullanarak gerçekleştirebilirsiniz
$ mkdir -p a/b/c/d
$ touch a/X
$ zip -r sample.zip a
adding: a/ (stored 0%)
adding: a/X (stored 0%)
adding: a/b/ (stored 0%)
adding: a/b/c/ (stored 0%)
adding: a/b/c/d/ (stored 0%)
$ python z.py
True
True
False
Dizinleri ZipFile.namelist() ile denetleyebilirsiniz.
import os, zipfile
dir = "some/directory/"
z = zipfile.ZipFile("myfile.zip")
if dir in z.namelist():
print "Found %s!" % dir
Bu dosyalar için çalışır, ancak dizinler için kullanılmaz: (en azından benim için değil.) –
Dizininizin doğru şekilde biçimlendirildiğinden emin olmak için .zip dosyanızın 'namelist()' yazdırarak yazdırmayı deneyin. – enderskill
Yea Ben zaten dosyaları zip dosyaları olan docx dosyaları için yapmaya çalışıyorum, bu yüzden önemli değil mi? –
.
import zipfile
z = zipfile.ZipFile("file.zip")
if "DirName/" in [member.filename for member in z.infolist()]:
print("Directory exists in archive")
Python32 ile test edilmiş ve işlevsel.
Hangi nedenlerle docx dosyaları için çalışmaz. :( –
Bir zip yerine bir docx dosyası kullanmaya çalışıyorsunuz? Uzatmayı .zip olarak yeniden adlandırın ve tekrar deneyin, işe yaramalı, – Lanaru
İyi bir şekilde sıkıştırılıyor ve tüm dosyaları yazdırabiliyorum. "word" dizini, kelime/webSettings.xml gibi tekil dosyalarda değil, yani bir eşleşme elde etmiyor. –
Teşekkürler Bu sağladığınız örnek ile çalıştı.Ama ben docx dosyaları için bunu yapmaya çalışıyorum.Özellikle zip dosyası "kelime" dizini içeriyorsa kontrol ediyorum, ama bana yanlış yanıtlar veriyor :( –
Sadece 'docx' içindeki dosya listesini yazdırmaya çalışın ve bununla garip olanı görün: 'print zipfile.ZipFile (" sample.docx "," r ") namelist()' –
Sanırım, sözcükten önce bir önekiniz var. Lütfen kontrol et. –