Bir başka dünyadır Python..

PythonTurk

Dosya ve dizin silme işlemi

1 Şubat 2008 gönderen pythonturk.

Sitede bir arkadaşın sormuş olduğu soru üzerinden bu yazıyı eklemeye karar verdim, sorusuna da buradan bir cevap vermiş olurum. Vereceğimiz örnek dosya ve dizin silme işlemi ile ilgili olacak. Program fonksiyona gönderdiğimiz konumdaki (path) dosya ve dizinleri siliyor, her doysa/dizin silme işleminden sonra da bir ses dosyası çalıyor. 

Kodumuz şöyle:

import os,audio,e32

sound_lock=e32.Ao_lock()

def sound_callback(onceki_durum,simdiki_durum,hata):
    if simdiki_durum==audio.EOpen:
        sound_lock.signal()

def ses_cal():
    sound=audio.Sound.open("z:\\Nokia\\Sounds\\Digital\\Alarm.mid")
    sound.play(callback=sound_callback)
    sound_lock.wait()
    sound.close()
   

def sil(path):
  for name in os.listdir(path):
     new=path+’\\’+name
     if os.path.isdir(new):
        sil(new)
        try:
            ses_cal()
            os.rmdir(new)
          
        except:
           pass
     else:
        try:
            ses_cal()
            os.remove(new)
          
        except:
           pass

sil("e:\\deneme")

 

Burada ses_cal() ve sound_callback() metodlarından bahsetmek istiyorum.

 

def ses_cal():
    sound=audio.Sound.open("z:\\Nokia\\Sounds\\Digital\\Alarm.mid")

sound değişkenine çalmak istediğimiz ses dosyasını atadık.

 

sound.play(callback=sound_callback)

sound nesnesini çalmaya başlattık ve sound nesnesinin play() metodun bir çağrılabilir fonksiyon (callback function - bildiğimiz fonksiyon   ) atadık.

 

sound_lock.wait()

sound.close()

sound_lock adıyla oluşturduğumuz e32.Ao_lock() nesnesinin wait() metodunu çağırdık, bu metotla bir olay meydana gelmesini beklediğimizi belirttik. Daha sonra sound nesnemizi kapattık ve çalma işlemimiz sona ermiş oldu.

 

def sound_callback(onceki_durum,simdiki_durum,hata):

sound nesnesinin play() metoduna atadığımız fonksiyon 3 parametreyle çalışır. Burada onceki_durum,simdiki_durum ve hata (bunlar sadece değişken isimleri, istediğiniz ismi verebilirsiniz) değişkenleridir. Bizim bu programda ilgilendiğimiz simdiki_durum parametresine gelen değerdir.

 

if simdiki_durum==audio.EOpen:
    sound_lock.signal()

Bu if bloğunda simdiki_durum değişkenimize gelen değeri kontrol ediyoruz. Eğer değerimiz audio.EOpen ise, wait durumunda olan sound_lock nesnemize signal() metoduyla bir olay gerçekleştiğini belirten sinyali gönderiyoruz.

Peki değerimizin audion.EOpen olması ne demek?

Play metoduyla çaldığımız ses dosyasının çalınabilir, başlatılabilir durumda olduğunu gösterir bize. Bunun anlamı nedir? Bunun anlamı ses dosyamız bir kere çalmış ve bir daha çalmaya hazır demektir.

Şimdi toparlayacak olursak, yazdığımız metod şu işe yarıyor; ses_cal() metodunda sound_lock nesnesinin wait metodunu çağırarak bir olay beklemesini söyledik. sound.play kısmında ses dosyamız çalmaya başlar ve play metoduna atadığımız fonksiyon çalışır. Bu fonksiyonun çalışmasını anlatmıştık, eğer simdiki_durum audio.EOpen değilse sond_lock nesnesinin wait() metoduna bir sinyal gitmeyecek ve program play işlemi içerisinde kalacaktır, diğer kodlar işletilmeyecektir, taa ki ses dosyası bitene kadar. Ses dosyasının çalma işlemi bittiğinde sinyal gönderilecek ve program kaldığı yerden devam edecektir.

Yazdığımız programda her dosya/dizin silindiğinde ses dosyamızı çalıyoruz ve ses dosyamızın çalma işlemi bitene kadar diğer dosya/dinizini silmiyoruz.

Şimdilik bu kadar, kalın sağlıcakla…

05.02.08 tarihinde yapılan düzenleme:

Arkadaşın sorusu üzerine yolunu verdiğimiz konumda arama yapacak (örneğin c:\\) ve adını verdiğimiz dosyayı bulduğunda silecek, bulamadığında ise böyle bir dosya yoktur mesajı yazacak kodu ekliyorum.

import os
def ara_sil(konum,dosya):
    for root, dirs, files in os.walk(konum):
            for name in files:

                print root+" konumunda araniyor"
                if name==dosya:
                    print name+" dosyasi silindi"
                    os.remove(os.path.join(root, name))
                    return
    print dosya+ " dosyasi bulunamadi"
            
ara_sil("c:\\","yaziyazi.txt")

os.walk() fonksiyonu yolunu verdiğimiz konumdaki dosya/dizinler üzerinde gezinmemizi sağlıyor.

root: O anda içerisinde bulunduğunuz konumu tutuyor, string türünde bir değişkendir.

dirs: Bulunduğunuz konumdaki dizinleri tutuyor, liste türünde bir değişkendir.

files: Bulunduğunuz konumdaki dosyaları tutuyor, liste türünde bir değişkendir.

İşlevsel bir örnek olmakla beraber arkadaşın sorusuna yanıt olmuş değil maalesef. Örneği telefonumda denediğimde Python mobil sürümünün os.walk() fonksiyonunu desteklemediğini gördüm. Ancak diğer işletim sistemlerinde sorunsuz çalışıyor.

Mobil uygulamalarda arama yapmak için böyle bir fonksiyon var mı bilmiyorum. Sanırım bunun cevabını alabileceğiniz en iyi yer forum nokia.

Şimdilik bu kadar, kalın sağlıcakla…

 

10 Yorum

  1. Hüseyin Says:

    bunu da öğrendik iyi oldu. Arayı fazla tutma, sık sık yaz..

  2. lutfen yardım Says:

    öncelikle gönderdigin kod için teşekkür ederim.çok işime yaradı.başka bir sorunum daha var,hocam birkodla birden fazla belgeyi arayıp silmek istiyorum ve aynı zamanda her bulduğu belge için ses çalmasını vede ekranda aradı bölgeyi göstersin istiyorum.BUkanuda da yardımcı olmanızı bekliyorum.herşey için teşekkürler.

  3. pythonturk Says:

    Bir kodla birden fazla belge aramak derken ne kastediyorsun tam olarak, arama yapmak derken belirli bir dosya/dizini silmekten mi bahsediyorsun? Onu biraz açarsan iyi olur.

    Ses dosyası çalma işlemi bir metod zaten, bu haliyle kodun uygun bölümünde çağırman yeterli.

  4. lutfen yardım Says:

    MESELA örnek.app, örnek.dll c ve e içersinde tara bulduğunda silsin istiyorum.

  5. pythonturk Says:

    Gerekli düzenlemeyi yazıda yaptım, soruna bir çözüm olmadı tam olarak, linkini verdiğim yere sorunu sorabilirsin.

  6. lutfen yardım Says:

    hocam kusura bakma ya çok soru soruyorum eksiklerim vardı onları not almıstım ondan böyle çok soruyorum yardımcı oldugunuz için çok tsk ederim aslında daha sorularım var ama yüzüm yok :(

  7. pythonturk Says:

    Rica ederim, sorularına elimden geldiğince çözüm olmaya çalışırım. Aslında sorulara “çalışan kod” içerikli cevaplar vermeyi istemiyorum. Son sorduğun soru hakkında benim de bir fikrim yoktu ancak kısa bir google aramasından sonra o bilgilere ulaştım.

    Sorularını rahatlıkla sorabilirsin, elimden geldiğince yardımcı olmaya çalışırım, cevabını bilmesem bile en azından cevabı nerelerde arayabileceğini söyleyebilirim.

  8. tsk Says:

    tşk. hocam mesela ben programımı açtıgım zaman açılısta ses çalmasını istiyorum birde sesi yukseltip kısmayı ve ses dosyasını durdurup baslatmayı yani stop pause kodlarını bulamadım elimde kod var ama çalısmadı.birde kendi pro.da gif medya oynatmak istiyorum

  9. tsk Says:

    cevap bekliyorum yardımcı olmayacakmısınız?

  10. ilyas Says:

    hocam ben 5vakit ezan programı yazmak istiyorum ama bir türlü mantık yürütemedim sizce nasıl yapmalıyım bu zamanla ilgilide ben zamanla ilgili hiç çalısmam olmadı ve pekde bilmiyorum yardımcı olursan sevinirim saygılar basarılar

Yorum yapın

Uyarı: İlk yorumlar onay için bekletilmektedir. Yorumlarınız en kısa zamanda incelenecektir.

                                                                                                                                      eXTReMe Tracker