1. rstab Modülü¶
| Modül Adı: | rstab |
|---|---|
| Sürümü: | 0.2 |
| Lisansı: | Kamuya Açık |
| Yazarı: | Fırat Özgül (istihza) |
| Web: | http://www.istihza.com |
1.1. Modülü Nereden Bulabilirim?¶
rstab modülünü http://www.istihza.com/rstab/rstab-0.2/anakaynak/rstab-0.2.tar.gz adresinden indirebilirsiniz.
1.2. Giriş¶
reStructuredText belgeleriyle uğraşanların çok iyi bildiği gibi, rST belgelerinde tablo oluşturmak oldukça zahmetli bir iştir. Örneğin rST biçimli şu tabloya bir bakın:
+----------+----------+----------+----------+
| İSİM | SOYİSİM | ADRES | MESLEK |
+==========+==========+==========+==========+
| Ferhat | Gider | İstanbul | Yazar |
+----------+----------+----------+----------+
| Ahmet | Erden | Ankara | Çevirmen |
+----------+----------+----------+----------+
| Mehmet | Artır | İzmir | Çizer |
+----------+----------+----------+----------+
| Kezban | Güler | Adana | Mühendis |
+----------+----------+----------+----------+
| Selin | Güleç | Bursa | Öğretmen |
+----------+----------+----------+----------+
| Selim | Gelir | İzmit | Esnaf |
+----------+----------+----------+----------+
Böyle bir tablo oluşturmak hem sıkıcı, hem de zaman alıcı olabilir.
İşte rstab modülü bu noktada işinizi kolaylaştırabilir. Bu modül, bir liste içine demet halinde girilmiş verilerden rST tabloları oluşturur.
1.3. Temel Kullanım¶
Yukarıdaki tabloyu rstab modülüyle oluşturmak için şöyle bir betik yazmamız yeterli olacaktır:
from rstab import *
kisiler = [("İSİM", "Ferhat", "Ahmet", "Mehmet",
"Kezban", "Selin", "Selim"),
("SOYİSİM", "Gider", "Erden", "Artır",
"Güler", "Güleç", "Gelir"),
("ADRES", "İstanbul", "Ankara", "İzmir",
"Adana", "Bursa", "İzmit"),
("MESLEK", "Yazar", "Çevirmen", "Çizer",
"Mühendis", "Öğretmen", "Esnaf")
]
Table(kisiler).create_table()
Gördüğünüz gibi, ilk iş olarak rstab modülünü içe aktarıyoruz. Kullanım kolaylığı açısından rstab modülünü from rstab import * şeklinde içe aktarabilirsiniz. Modülü içe aktardıktan sonra, tablo içeriğini oluşturacak verileri hazırlıyoruz. Yaptığımız şey esasında basit bir liste oluşturmaktan ibarettir. Her sütunu ayrı bir demet olarak gösterdiğimize dikkat edin. Mesela kisiler adlı listedeki ilk demetimiz şudur:
("İSİM", "Ferhat", "Ahmet", "Mehmet",
"Kezban", "Selin", "Selim"),
Bu demetin ilk öğesi (yani “İSİM”), sütunun başlığı olacaktır. Geri kalan öğeler ise sütunun geri kalanını meydana getirecek.
Tablodaki sütun başlıklarını ve sütun içeriklerini yukarıdaki şablona göre oluşturabilirsiniz.
Tablo içindeki verileri hazırladıktan sonra şu satırı yazıyoruz:
Table(kisiler).create_table()
Burada rstab modülü içindeki Table adlı sınıfın create_table() adlı fonksiyonunu çağırdık. Ayrıca Table sınıfına parametre olarak, yukarıda oluşturduğumuz kisiler adlı tabloyu verdiğimize dikkat edin.
Artık betiğimizi çalıştırabiliriz.
Yalnız unutmamamız gereken şey, rstab modülünün bir Python 3 betiği olduğudur. Dolayısıyla bu modülü çalıştırabilmek için Python’un 3.x sürümlerinden birini kullanmalısınız.
Yukarıdaki betiği deneme.py adlı bir dosyaya kaydettiğinizi varsayarsak, şöyle bir komut işimizi görecektir:
python3 deneme.py
Bu komutu verdiğinizde şöyle bir çıktı alacaksınız:
+----------+----------+----------+----------+
| İSİM | SOYİSİM | ADRES | MESLEK |
+==========+==========+==========+==========+
| Ferhat | Gider | İstanbul | Yazar |
+----------+----------+----------+----------+
| Ahmet | Erden | Ankara | Çevirmen |
+----------+----------+----------+----------+
| Mehmet | Artır | İzmir | Çizer |
+----------+----------+----------+----------+
| Kezban | Güler | Adana | Mühendis |
+----------+----------+----------+----------+
| Selin | Güleç | Bursa | Öğretmen |
+----------+----------+----------+----------+
| Selim | Gelir | İzmit | Esnaf |
+----------+----------+----------+----------+
Artık bu tabloyu kopyalayıp, rst belgelerinizde kullanabilirsiniz. Bu tablo, HTML çıktısında şöyle görünür:
İSİM SOYİSİM ADRES MESLEK Ferhat Gider İstanbul Yazar Ahmet Erden Ankara Çevirmen Mehmet Artır İzmir Çizer Kezban Güler Adana Mühendis Selin Güleç Bursa Öğretmen Selim Gelir İzmit Esnaf
Eğer tablo çıktısını komut satırından kopyalamak yerine bir dosyaya kaydetmek isterseniz şu komutu verebilirsiniz:
python3 deneme.py > tablo.txt
Bu komut, tabloyu tablo.txt adlı bir dosyaya kaydedecektir.
1.4. create_table() Fonksiyonunun Parametreleri¶
Table sınıfı içindeki create_table() adlı fonksiyon birkaç parametre alır:
1.4.1. homogeneous¶
Bu parametre, bir tablodaki sütun genişliklerinin bütün tabloda aynı olup olmayacağını belirler. Bu parametre True ve False olmak üzere iki farklı değer alır. Eğer bu değişkene True değerini verecek olursanız, tablodaki sütunlar, tablo içindeki en uzun öğenin genişliği kadar olacaktır. Yani bütün sütunlar aynı genişliğe sahip olacaktır. bu parametrenin öntanımlı değeri True‘dur. Eğer bu parametreye False değeri verirseniz, tablodaki sütunlar, kendi içinde boyutlanacaktır. Mesela:
from rstab import Table
ornek = [
("MEYVELER",
"elma", "armut", "muz",
"karpuz", "kavun", "erik"),
("SEBZELER",
"pırasa", "karnıbahar", "bezelye",
"fasülye", "patlıcan", "kabak"),
("EŞYALAR",
"masa", "sandalye", "kapı",
"dolap", "raf", "tabure")
]
Table(ornek).create_table(homogeneous=False)
Bu betiği çalıştırdığımızda karşımıza şöyle bir tablo çıkar:
+--------+----------+--------+
|MEYVELER|SEBZELER |EŞYALAR |
+========+==========+========+
|elma |pırasa |masa |
+--------+----------+--------+
|armut |karnıbahar|sandalye|
+--------+----------+--------+
|muz |bezelye |kapı |
+--------+----------+--------+
|karpuz |fasülye |dolap |
+--------+----------+--------+
|kavun |patlıcan |raf |
+--------+----------+--------+
|erik |kabak |tabure |
+--------+----------+--------+
Gördüğünüz gibi, bu tabloda her sütun kendi içinde boyutlanıyor.
Eğer homogeneous parametresinin değerini True yaparsanız karşınıza çıkacak tablo şöyle olacaktır:
+----------+----------+----------+
|MEYVELER |SEBZELER |EŞYALAR |
+==========+==========+==========+
|elma |pırasa |masa |
+----------+----------+----------+
|armut |karnıbahar|sandalye |
+----------+----------+----------+
|muz |bezelye |kapı |
+----------+----------+----------+
|karpuz |fasülye |dolap |
+----------+----------+----------+
|kavun |patlıcan |raf |
+----------+----------+----------+
|erik |kabak |tabure |
+----------+----------+----------+
Burada ise, tablo içindeki en uzun öğe, bütün sütunların genişliğini belirliyor.
1.4.2. empty_cell¶
Bu parametre, boş hücrelere ne yazılacağını belirliyor. Öntanımlı olarak, eğer bir hücre boş kalacaksa o hücreye herhangi bir şey yazılmaz. Yani şöyle:
+----------+----------+----------+
|MEYVELER |SEBZELER |EŞYALAR |
+==========+==========+==========+
|elma |pırasa |masa |
+----------+----------+----------+
|armut |karnıbahar|sandalye |
+----------+----------+----------+
|muz |bezelye |kapı |
+----------+----------+----------+
|karpuz |fasülye |dolap |
+----------+----------+----------+
|kavun |patlıcan |raf |
+----------+----------+----------+
|erik |kabak | |
+----------+----------+----------+
Grdüğünüz gibi, boş hücre tamamen boş... Ama eğer isterseniz siz boş hücrelere otomatik olarak bir metin veya işaret de yerleştirmek isteyebilirsiniz. Bunun için betiğimizi şöyle yazıyoruz:
from rstab import Table
ornek = [
("MEYVELER",
"elma", "armut", "muz",
"karpuz", "kavun", "erik"),
("SEBZELER",
"pırasa", "karnıbahar", "bezelye",
"fasülye", "patlıcan", "kabak"),
("EŞYALAR",
"masa", "sandalye", "kapı",
"dolap", "raf")
]
Table(ornek).create_table(empty_cell="yok")
Bu betiği çalıştırdığımızda şöyle bir tablo görürüz:
+----------+----------+----------+
|MEYVELER |SEBZELER |EŞYALAR |
+==========+==========+==========+
|elma |pırasa |masa |
+----------+----------+----------+
|armut |karnıbahar|sandalye |
+----------+----------+----------+
|muz |bezelye |kapı |
+----------+----------+----------+
|karpuz |fasülye |dolap |
+----------+----------+----------+
|kavun |patlıcan |raf |
+----------+----------+----------+
|erik |kabak |yok |
+----------+----------+----------+
1.4.3. enum¶
Bu parametre, tablo öğelerinin numaralandırılıp numaralandırılmayacağını belirler. Bu parametrenin önranımlı değeri False‘tur. Yani rstab modülü öntanımlı olarak tabloları numaralandırmaz. Bu parametreyi şöyle kullanıyoruz:
from rstab import Table
ornek = [
("MEYVELER",
"elma", "armut", "muz",
"karpuz", "kavun", "erik"),
("SEBZELER",
"pırasa", "karnıbahar", "bezelye",
"fasülye", "patlıcan", "kabak"),
("EŞYALAR",
"masa", "sandalye", "kapı",
"dolap", "raf")
]
Table(ornek).create_table(enum=True)
Bu betik şöyle bir sonuç verir:
+----------+----------+----------+----------+
|No. |MEYVELER |SEBZELER |EŞYALAR |
+==========+==========+==========+==========+
|1 |elma |pırasa |masa |
+----------+----------+----------+----------+
|2 |armut |karnıbahar|sandalye |
+----------+----------+----------+----------+
|3 |muz |bezelye |kapı |
+----------+----------+----------+----------+
|4 |karpuz |fasülye |dolap |
+----------+----------+----------+----------+
|5 |kavun |patlıcan |raf |
+----------+----------+----------+----------+
|6 |erik |kabak | |
+----------+----------+----------+----------+
Eğer bu tablonun daha şık görünmesini isterseniz homogeneous parametresini False değerine getirerek sütunların serbestçe boyutlandırılmasını sağlayabilirsiniz:
Table(ornek).create_table(homogeneous=False, enum=True)
Bu defa tablomuz şöyle görünecek:
+---+--------+----------+--------+
|No.|MEYVELER|SEBZELER |EŞYALAR |
+===+========+==========+========+
|1 |elma |pırasa |masa |
+---+--------+----------+--------+
|2 |armut |karnıbahar|sandalye|
+---+--------+----------+--------+
|3 |muz |bezelye |kapı |
+---+--------+----------+--------+
|4 |karpuz |fasülye |dolap |
+---+--------+----------+--------+
|5 |kavun |patlıcan |raf |
+---+--------+----------+--------+
|6 |erik |kabak | |
+---+--------+----------+--------+
1.5. rstab Modülünün Farklı Kullanım Alanları¶
rstab modülünü varolan öğe listeleri üzerine de uygulayabilirsiniz. Mesela dir(list), dir(tuple) ve dir(dict) listelerini ele alalım:
from rstab import *
s = dir(tuple)
s.insert(0, "Demetler")
l = dir(list)
l.insert(0, "Listeler")
d = dir(dict)
d.insert(0, "Sözlükler")
tbl = [s, l, d]
Table(tbl).create_table(homogeneous=False,
empty_cell="--",
enum=True)
Burada, listelerin en başına, sütun başlıklarını (“Demetler”, “Listeler” ve “Sözlükler”) nasıl eklediğimize dikkat edin.
Bu betik şöyle bir çıktı verir:
+---+----------------+----------------+----------------+
|No.|Demetler |Listeler |Sözlükler |
+===+================+================+================+
|1 |__add__ |__add__ |__class__ |
+---+----------------+----------------+----------------+
|2 |__class__ |__class__ |__contains__ |
+---+----------------+----------------+----------------+
|3 |__contains__ |__contains__ |__delattr__ |
+---+----------------+----------------+----------------+
|4 |__delattr__ |__delattr__ |__delitem__ |
+---+----------------+----------------+----------------+
|5 |__doc__ |__delitem__ |__doc__ |
+---+----------------+----------------+----------------+
|6 |__eq__ |__doc__ |__eq__ |
+---+----------------+----------------+----------------+
|7 |__format__ |__eq__ |__format__ |
+---+----------------+----------------+----------------+
|8 |__ge__ |__format__ |__ge__ |
+---+----------------+----------------+----------------+
|9 |__getattribute__|__ge__ |__getattribute__|
+---+----------------+----------------+----------------+
|10 |__getitem__ |__getattribute__|__getitem__ |
+---+----------------+----------------+----------------+
|11 |__getnewargs__ |__getitem__ |__gt__ |
+---+----------------+----------------+----------------+
|12 |__gt__ |__gt__ |__hash__ |
+---+----------------+----------------+----------------+
|13 |__hash__ |__hash__ |__init__ |
+---+----------------+----------------+----------------+
|14 |__init__ |__iadd__ |__iter__ |
+---+----------------+----------------+----------------+
|15 |__iter__ |__imul__ |__le__ |
+---+----------------+----------------+----------------+
|16 |__le__ |__init__ |__len__ |
+---+----------------+----------------+----------------+
|17 |__len__ |__iter__ |__lt__ |
+---+----------------+----------------+----------------+
|18 |__lt__ |__le__ |__ne__ |
+---+----------------+----------------+----------------+
|19 |__mul__ |__len__ |__new__ |
+---+----------------+----------------+----------------+
|20 |__ne__ |__lt__ |__reduce__ |
+---+----------------+----------------+----------------+
|21 |__new__ |__mul__ |__reduce_ex__ |
+---+----------------+----------------+----------------+
|22 |__reduce__ |__ne__ |__repr__ |
+---+----------------+----------------+----------------+
|23 |__reduce_ex__ |__new__ |__setattr__ |
+---+----------------+----------------+----------------+
|24 |__repr__ |__reduce__ |__setitem__ |
+---+----------------+----------------+----------------+
|25 |__rmul__ |__reduce_ex__ |__sizeof__ |
+---+----------------+----------------+----------------+
|26 |__setattr__ |__repr__ |__str__ |
+---+----------------+----------------+----------------+
|27 |__sizeof__ |__reversed__ |__subclasshook__|
+---+----------------+----------------+----------------+
|28 |__str__ |__rmul__ |clear |
+---+----------------+----------------+----------------+
|29 |__subclasshook__|__setattr__ |copy |
+---+----------------+----------------+----------------+
|30 |count |__setitem__ |fromkeys |
+---+----------------+----------------+----------------+
|31 |index |__sizeof__ |get |
+---+----------------+----------------+----------------+
|32 |-- |__str__ |items |
+---+----------------+----------------+----------------+
|33 |-- |__subclasshook__|keys |
+---+----------------+----------------+----------------+
|34 |-- |append |pop |
+---+----------------+----------------+----------------+
|35 |-- |count |popitem |
+---+----------------+----------------+----------------+
|36 |-- |extend |setdefault |
+---+----------------+----------------+----------------+
|37 |-- |index |update |
+---+----------------+----------------+----------------+
|38 |-- |insert |values |
+---+----------------+----------------+----------------+
|39 |-- |pop |-- |
+---+----------------+----------------+----------------+
|40 |-- |remove |-- |
+---+----------------+----------------+----------------+
|41 |-- |reverse |-- |
+---+----------------+----------------+----------------+
|42 |-- |sort |-- |
+---+----------------+----------------+----------------+
Modülle ilgili sorularınız için kistihza [at] yahoo [nokta] com adresinden bana ulaşabilirsiniz.