- Konu sahibi
- #1
ZIP dosyasını Python’da açmak için standart kütüphanedeki
Bu kodu ZIP dosyanızla aynı çalışma klasöründe bir Python dosyasına, örneğin
Arşivi çıkarmadan önce hangi dosyaların bulunduğunu görmek istiyorsanız yalnızca
Buradaki liste, arşivin içindeki dosya ve klasör adlarını gösterir. Bu çıktı dosyaların gerçekten açıldığını kanıtlamaz; yalnızca ZIP içindeki kayıtları gösterir. Bozuk veya parola korumalı bir arşivde asıl dosya içeriğine erişirken hata oluşabilir.
Arşivin tamamını açmak yerine belirli bir dosyayı almak için dosya adını
Örneğin arşivde dosya
Bir metin dosyasının içeriğine yalnızca bakmanız gerekiyorsa dosyayı ayrıca çıkarmadan
Bu örnekte
Güvenilmeyen bir ZIP dosyasını doğrudan mevcut proje klasörüne çıkarmak yerine ayrı ve geçici bir klasör kullanın. Arşivdeki dosya adlarını önce incelemek, beklenmeyen çalıştırılabilir dosyaları veya proje dosyalarını fark etmenizi sağlar.
Ayrıca hedef klasörde aynı adlı dosyalar varsa çıkarma işlemi mevcut dosyaların üzerine yazabilir. Bu nedenle önemli dosyaların bulunduğu bir klasörü hedef göstermek yerine yeni bir klasör seçin. Parola korumalı ZIP dosyalarında parolayı bayt biçiminde vermeniz gerekir:
Parola yanlışsa veya arşiv farklı bir şifreleme yöntemi kullanıyorsa çıkarma sırasında hata alabilirsiniz. Bu durumda parola bilgisini ve arşivin hangi araçla oluşturulduğunu kontrol edin;
zipfile modülünü kullanabilirsiniz. Dosyanın içeriğini görmek için namelist(), tüm dosyaları çıkarmak için extractall(), yalnızca belirli bir dosyayı almak için extract() çağrılır. Aşağıdaki örnek, arsiv.zip dosyasını cikarilan_dosyalar klasörüne açar:
Python:
from zipfile import ZipFile
zip_yolu = "arsiv.zip"
cikis_klasoru = "cikarilan_dosyalar"
with ZipFile(zip_yolu, "r") as arsiv:
print("Arşivdeki dosyalar:")
for dosya in arsiv.namelist():
print(dosya)
arsiv.extractall(cikis_klasoru)
print(f"Dosyalar şu klasöre çıkarıldı: {cikis_klasoru}")
Bu kodu ZIP dosyanızla aynı çalışma klasöründe bir Python dosyasına, örneğin
zip_ac.py adıyla kaydedip çalıştırabilirsiniz. arsiv.zip bulunamazsa FileNotFoundError hatası alırsınız; bu durumda dosya adını ve Python programının çalıştırıldığı klasörü kontrol edin. İşlem başarılıysa cikarilan_dosyalar klasörü oluşturulur ve arşivdeki klasör yapısı korunarak dosyalar buraya çıkarılır.ZIP dosyasının içeriğini kontrol etme
Arşivi çıkarmadan önce hangi dosyaların bulunduğunu görmek istiyorsanız yalnızca
namelist() sonucunu yazdırmanız yeterlidir:
Python:
from zipfile import ZipFile
with ZipFile("arsiv.zip", "r") as arsiv:
dosyalar = arsiv.namelist()
for dosya in dosyalar:
print(dosya)
Buradaki liste, arşivin içindeki dosya ve klasör adlarını gösterir. Bu çıktı dosyaların gerçekten açıldığını kanıtlamaz; yalnızca ZIP içindeki kayıtları gösterir. Bozuk veya parola korumalı bir arşivde asıl dosya içeriğine erişirken hata oluşabilir.
Yalnızca belirli bir dosyayı çıkarmak
Arşivin tamamını açmak yerine belirli bir dosyayı almak için dosya adını
extract() metoduna verin. Dosya adı, namelist() çıktısında göründüğü biçimde ve klasör yolu dahil yazılmalıdır:
Python:
from zipfile import ZipFile
with ZipFile("arsiv.zip", "r") as arsiv:
arsiv.extract("raporlar/ocak.txt", "cikarilan_dosyalar")
print("Seçilen dosya çıkarıldı.")
Örneğin arşivde dosya
raporlar/ocak.txt adıyla kayıtlıysa yalnızca bu dosya hedef klasöre çıkarılır. Belirtilen ad arşivde yoksa KeyError oluşur; önce namelist() ile gerçek dosya adını kontrol edin.ZIP içindeki metin dosyasını diske çıkarmadan okumak
Bir metin dosyasının içeriğine yalnızca bakmanız gerekiyorsa dosyayı ayrıca çıkarmadan
read() ile okuyabilirsiniz:
Python:
from zipfile import ZipFile
with ZipFile("arsiv.zip", "r") as arsiv:
veri = arsiv.read("raporlar/ocak.txt")
metin = veri.decode("utf-8")
print(metin)
Bu örnekte
read() bayt türünde veri döndürür. Dosya UTF-8 yerine farklı bir karakter kodlamasıyla oluşturulmuşsa decode("utf-8") kısmında hata alabilirsiniz; dosyanın gerçek kodlamasına göre cp1254 gibi uygun bir kodlama kullanmanız gerekir. İkili dosyalarda, örneğin resim veya PDF dosyalarında, metne dönüştürme yapmadan bayt verisiyle çalışmalısınız.Güvenli çıkarma için dikkat edilmesi gerekenler
Güvenilmeyen bir ZIP dosyasını doğrudan mevcut proje klasörüne çıkarmak yerine ayrı ve geçici bir klasör kullanın. Arşivdeki dosya adlarını önce incelemek, beklenmeyen çalıştırılabilir dosyaları veya proje dosyalarını fark etmenizi sağlar.
extractall() dosyaları açar; dosyaların güvenli olduğunu veya kötü amaçlı içerik barındırmadığını doğrulamaz.Ayrıca hedef klasörde aynı adlı dosyalar varsa çıkarma işlemi mevcut dosyaların üzerine yazabilir. Bu nedenle önemli dosyaların bulunduğu bir klasörü hedef göstermek yerine yeni bir klasör seçin. Parola korumalı ZIP dosyalarında parolayı bayt biçiminde vermeniz gerekir:
Python:
from zipfile import ZipFile
parola = b"ornek-parola"
with ZipFile("arsiv.zip", "r") as arsiv:
arsiv.extractall("cikarilan_dosyalar", pwd=parola)
Parola yanlışsa veya arşiv farklı bir şifreleme yöntemi kullanıyorsa çıkarma sırasında hata alabilirsiniz. Bu durumda parola bilgisini ve arşivin hangi araçla oluşturulduğunu kontrol edin;
zipfile modülü her ZIP şifreleme türünü desteklemeyebilir.