Basit Bir Python Örneği

Bir dizin içerisinde düzenli olarak isimlendirdiğim pdf dosyaları vardı ve ben bu pdf dosyaları arasında kaybolmamak için bir listesini oluşturmaya karar verdim. Başlangıç olarak özyinelemeli olarak dizinleri dolaşıp içerisindeki dosya isimlerini ekrana yazacak basit bir python kodu yazayım dedim. Bu kodu şimdi burada paylaşacağım. Bir sonraki aşaması (zaman bulabilirsem) bu kodun çıktı olarak ya bir xml dosyası ya da bir html dosyası oluşturmasını sağlamak olacaktır diye düşünüyorum (bu günlükte verdiğim sözlerin haddi hesabı yok :) ). Kod içerisindeki yorumların yeterince açıklayıcı olduğunu düşündüğüm için daha fazla gevezelik yapmayacağım. Acemi bir python geliştiricisi olduğumu kabul edip yanlışlarımı, önerilerinizi sakınmadan söyleyebilirsiniz.

import os.path
import sys

class DizinBilgisi:

  #Sinif yapicisi
  def __init__(self):
      #Ekrana yazarken kullanacagimiz sayaci ilkleyelim
      #Basina iki tane alt cizgi koydugumuz degiskenler
      #private degisken oluyormus :?
      self.__sayac = 0;
      #alt dizinleri dolasma varsayilan olarak kapali
      #sadece istenen dizin icerisindeki dosyalari listelesin
      self.__recursive = False;

  #Bu metod icerisindeki dosyalari listeleyecegimiz dizini
  #ayarlamak icin kullaniliyor
  def setDizin(self,_dizin):
      #dolasilacak olan dizin
      #bu saha da private
      self.__dizin=_dizin;

  #alt dizinlerin dolasilip dolasilmayacagini ayarlayan
  #metod
  def setRecursive(self,_recursive):
      self.__recursive=_recursive;

  #ekrana yazma islemini baslatmak icin kullanilan
  #metod
  def ekranaYaz(self,_dizin="",_recursive=""):
      if(_dizin!=""):
          self.__dizin=_dizin
      if(_recursive!=""):
          self.__recursive=_recursive
      #Bu metodun amaci dizinin icerdigi dosyalarin adlarini
      #ekrana yazmak      
      self.__diziniEkranaYaz(self.__dizin)

  #private tanimlanmis ve parametre olarak
  #aldigi dizin icerisindeki dosyalari
  #ekrana yazan metod
  def __diziniEkranaYaz(self,dizinIsmi):
      #Ekrana dizin adini yazalim
      print dizinIsmi
      #dizin seviyesi icin sayaci arttiralim
      self.__sayac+=1
      #dizin icerisindeki dosya listesini alalim
      dosyalar = os.listdir(dizinIsmi)
      #listeyi dolasalim
      for file in dosyalar:
          #dosya ismini uygun sekilde ayarlamaliyiz
          dosyaIsmi = dizinIsmi+"/"+file
          #eger bu dosya bir dizinse
          if os.path.exists(dosyaIsmi) & os.path.isdir(dosyaIsmi):
              #ve alt dizinleri dolasmamiz isteniyorsa
              if self.__recursive==True:
                  #alt dizinleri dolasalim
                  self.__diziniEkranaYaz(dosyaIsmi)
          #bu dosya bir dosya ise
          elif os.path.isfile(dosyaIsmi):
              #bilgisini ekrana yazalim
              self.__dosyaAdiniYaz(file)
          #houston bir problemimiz var
          else:
              print "Dizin parametresinde hata var"
      #dizin seviyesini azaltalim
      self.__sayac-=1

  #bu metodun amaci dosya ismini guzel bir
  #sekilde ekrana yazalim
  def __dosyaAdiniYaz(self,dosyaAdi):
      tabs=""
      #dizinin seviyesi kadar tab ekliyoruz
      for i in range(self.__sayac):
          tabs+="\t"
      #tablarla birlikte dosya adini ekrana yaziyoruz
      print tabs+dosyaAdi

#Programin calistirilma kodu
def main():
  #DizinBilgisi sinifinin bir ornegini yaratalim
  db = DizinBilgisi()
  #girilen arguman sayisina gore islem yapacagiz
  if len(sys.argv)==2:
      #dizin ismi girilmis demek
      db.setDizin(sys.argv[1])
  elif len(sys.argv)==3:
      #dizin ismi ve recursive olup olmadigi girilmis
      db.setDizin(sys.argv[1])
      if sys.argv[2]=='r':
          db.setRecursive(True)
  else:
      print "Arguman olarak en azindan dizin yolunu vermeniz gerekmektedir."
      print "Alt dizinlerin listelenmesi icin dizin yolundan sonra r yazmaniz yeterlidir."
      sys.exit()
  db.ekranaYaz()

if __name__ == "__main__":
  main()


Kod Biçimlendirme için : http://formatmysourcecode.blogspot.com/

----------------
Now playing: Haggard - Chapter III: Awaking The Centuries

Hiç yorum yok: