Bz2

Pardus-Linux.org | Wiki sitesinden

Git ve: kullan, ara

Python ile Basit Bz2 İşlemleri


bz2 modülü, Python 2.3 ile modüller arasında kendine yer edinen ve bzip2 sıkıştırma desteği sağlayan
bir modüldür. Python ile yazılmış yazılımımıza dahil etmek için

import bz2

komutu kullanılır.


compress() , decompress()

String türündeki verileri sıkıştırmak için compress() fonksiyonunu kullanırız. Bu fonksiyon bize 8-bit sıkıştırılmış veri çıktısı verir. Sıkıştırılmış veriyi ilk haline döndürmek için ise decompress() fonksiyonunu kullanırız.

01- import bz2
02- ileti = "Pardus-Linux.org"
03- s_veri = bz2.compress(ileti, 5)
04- n_veri = bz2.decompress(s_veri)

Bu betikte 1. satırda modülümüzü çağırıp, 2. satırda yeni bir değişken tanımladık ve 3. satırda 5. seviye sıkıştırma aracıyla değişkenimizi sıkıştırdık. 3. satırda geçen “5” sıkıştırma seviyesi olup, girilmesi mecbur değildir ve 0 ile 9 arasında bir değer alabilir. 4. satırda sıkıştırılmış ifadeyi ayıklayarak n_veri değişkenine atadık.


BZ2Compressor, BZ2Decompressor
compress() ve decompress() fonksiyonlarından başka, yine string türündeki verilerin ardışık sıkıştırılma işlemleri için BZ2Compressor ve  Z2Decompressor sınıfları kullanılabilir. Bu sınıflar ile yeni bir sıkıştırma nesnesi oluşturulur ve bu nesne ile işlemler yapılır. Bu sınıflar compress(), flush() ve decompress() adlı üç fonksiyona sahiptir. compress() ve flush() BZ2Compressor sınıfıyla kullanılırken, decompress()
BZ2Decompressor sınıfıyla kullanılır. compress() ve decompress() adlarından da anlaşıldığı gibi sırasıyla sıkıştırma ve sıkıştırılan veriyi açmada kullanılırken, flush() sıkıştırma işleminin sona erdiğini bildirir.

01- import bz2
02- ileti = "Özgürlük İçin Pardus, Pardus İçin Pardus-Linux.org"
03- s_veri = ""
04- mengene = bz2.BZ2Compressor(5)
05- levye = bz2.BZ2Decompressor()
06- for kelime in ileti.split():
07-     s_veri += mengene.compress(kelime + " ")
08- s_veri += mengene.flush()
09- n_veri = levye.decompress(s_veri)

Satırları inceleyecek olursak :
1. satırda modülümüzü çağırdık.
2. satırda ileti değişkenine bir metin atadık.
3. satırda sıkıştırılmış veriyi saklayacağımız değişkenimizi tanıttık
4. satırda 5. seviyede sıkıştırıcı oluşturduk. 5 değeri yerine 0 ile 9 arasında bir değer yazabiliriz ve
yazılması mecburi bir değer değildir.
5. satırda ayıklayıcımızı oluşturduk
6. ve 7. satırlarda her bir kelime için, kelimelerin peşine boşluk ekleyerek sıkıştırma işlemi
gerçekleştirdik ve s_veri değişkenine atadık.
8. satırda sıkıştırma işleminin bittiğini bildirdik.
9. satırda sıkıştırılmamış veriyi n_veri değişkenine atadık.


BZ2File
Aslında sıkıştırma ve ayıklama işlemleri genelde metin üzerinde değil de dosyalar üzerinde gerçekleşir. bz2 modülünü dosyalar üzerinde kullanmak için BZ2File sınıfı kullanılır. Bu sınıf, bz2 dosyasını açar ve sağladığı fonksiyonlarla dosya üzerinde işlem yapmamızı sağlar. Kullanımı :

dosya = bz2.BZ2File(dosyaadı,açmatipi,arabellek,sıkıştırmaoranı)

şeklindedir.
dosyaadı, tırnak içinde yazılmış olarak bir dosyanın doğrudan adresi olabileceği gibi, bir dosyanın yolunu belirten bir değişken de olabilir. açmatipi, dosyanın yazılabilir ya da okunabilir tipte açılması için kullanılır. Eğer arabellek değeri girilmemişse yazılması mecburi değildir. Yazılabilir olarak açmak için "w", okunabilir olarak açmak için de "r" yazılır. Bir değer girilmezse öntanımlı olarak okunabilir türde açılır.


arabellek, işlem gerçekleştirilirken kullanılan arabellek miktarını belirtir. Eğer sıkıştırmaoranı girilmemişse yazılması mecbur değildir. 0 değeri arabellek değerinin ayrılmadığını belirtir ve öntanımlı olarak 0 değerini alır. Dosya büyüklüğüne göre ayarlanması tavsiye edilir.


sıkıştırmaoranı, dosyanın açılırken ya da sıkıştırılırken hangi sıkıştırma seviyesinde açılacağını bildirir. 0
ile 9 arasında değer alabilir ve yazılması mecburi değildir.


BZ2File sınıfının sağladığı fonksiyonlara gelecek olursak :
close() : Açmış olduğumuz dosyayı kapatmak için close() fonksiyonu kullanılır.
read(byte) : Açılan dosyadan girilen byte miktarı kadar veri okur.
readline(byte) : Açılan dosyadan girilen byte miktarı kadar verileri satır satır okur.
readlines(byte) : Açılan dosyadan girilen byte miktarı kadar verileri satır satır okur ve bir liste olarak çıktısını verir.
xreadlines() : Daha fazla başarım amacıyla kullanılır.
seek(hedef, burası) : "burası" olarak verilen konumdan, "hedef" olarak verilen konuma gitmek için kullanılır. "burası" seçeneğinin girilmesi mecburi değildir ve girilmezse 0 değerine yani belgenin başına eşittir.
tell() : Konumu tamsayı olarak verir.
write(veri) : "veri" değişkenin içeriğini dosyaya yazar.
writelines() : Ardışık metinleri dosyaya yazmak için kullanılır.
Örnek verecek olursak :

01- import bz2
02- dosya = bz2.BZ2File("PLO.bz2","r")
03- icerik = dosya.read()
04- dosya.close()
05- dosya = bz2.BZ2File("PLO.bz2","w")
06- yazilacak = "Pardus Kullanıcıları Derneği"
07- dosya.write(yazilacak)
08- dosya.close()


Bu betikte basit olarak, 2. satırda dosyamızı okunabilir türden açtık ve 3. satırda dosya içeriğini icerik
adlı değişkene atayıp 4. satırda dosya ile bağımızı kopardık. 5. satırda dosyayı bu kez yazılabilir şekilde
açıp, 7. satırda dosyamıza 6. satırda belirlediğimiz metnimizi yazdık ve dosya ile bağlantıyı 8. satırda
kapattık.


Erdem Artan
baDibere@gmail.com


Bu belge Pardus-Linux.org eDergi 4. Sayı'dan Kopyalanmıştır.