Dosya ve dizin silme işlemi
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): def ses_cal():
def sil(path): 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" |
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…
Şubat 3rd, 2008 at 01:54
bunu da öğrendik iyi oldu. Arayı fazla tutma, sık sık yaz..
Şubat 5th, 2008 at 08:17
ö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.
Şubat 5th, 2008 at 15:26
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.
Şubat 5th, 2008 at 16:24
MESELA örnek.app, örnek.dll c ve e içersinde tara bulduğunda silsin istiyorum.
Şubat 6th, 2008 at 00:11
Gerekli düzenlemeyi yazıda yaptım, soruna bir çözüm olmadı tam olarak, linkini verdiğim yere sorunu sorabilirsin.
Şubat 7th, 2008 at 14:57
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
Şubat 7th, 2008 at 18:49
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.
Şubat 19th, 2008 at 13:37
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
Mart 5th, 2008 at 15:14
cevap bekliyorum yardımcı olmayacakmısınız?
Temmuz 29th, 2008 at 14:23
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