Mario

WFN Üye
Konular
581
Mesajlar
581
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
ZIP dosyasını Python’da açmak için standart kütüphanedeki 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.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic