Dosya sistemi işlemleri bazı uygulamalarda oldukça gerekli olan bir ihtiyaç. Pek çok dilde bu işlemi yapabilmek için farklı programlama modelleri, API’ler veya nesneler bulunmakta. Bu yazıda Linux ve Windows işletim sistemlerinde dizin ve dosya yapısı işlemlerinden bahsedeceğim. Önce bu iki işletim sisteminin dosya sistemi farklılıklarından biraz bahsetmek isterim ki dosya sistemi ile ilgili kod yazarken bu farklılıklara dikkat etmek gerekli.Dosya sistemi yapıları:
Windows işletim sistemi, her ne kadar değiştirmiş olsalar bile, genelde dosya sistemi ağaç yapısı için sürücü kavramını ele alır. Sistemde birden çok sürücü olabilir.Linux (ve türevleri) işletim sistemleri ise tek bir dosya sistemi kökü barındırır. Bunun adı root gösterimi ise / dir.
Dosya yolları:
Bu işleme dosyaların gösterilmesi de diyebiliriz. Buna pek çok kişi aşinadır sanırım. örneğin deneme klasörü içindeki deneme.txt dosyasını windowsta C:denemedeneme.txt şeklinde gösterirken Linux tarafında /deneme/deneme.txt olarak gösteririz.
Şimdi bir iki örnek uygulama ile durumu açıklamaya çalışayım:Diyelim ki bir klasörümüz var ve bunun içinde çeşitli zamanlarda çekmiş olduğumuz 3000 kadar jpeg formatında resim var. Bu resimler de tabi çeşitli alt klasörler içine kaydedilmiş olsun. Bizden istenen ise bu resimlerin hepsinin 1024×768 boyutlu kopyalarını yapmak ve aynı klasöre kaydetmek. Kaydederken orjinal dosya isminin başına boyutlandi_ kelimesini ekliyoruz. Bu işlemi photoshop gibi resim işleme yazılımları ile tek tek, veya bu yazılımların toplu iş (batch mode) özelliklerini kullanarak da gerçekleştirebiliriz. Yada bir python kütüphanesi olan PIL (Python Imaging Library) kullanarak gerçekleştirebiliriz.
#Resim dosyaları işlemleriimport Imagefrom os import walk,pathkok_dizin = ‘C:\resimler’#bütün alt klasörlerdeki dosyalar dahil taramaya başlıyoruz.for yol,dizinler,dosyalar in walk(kok_dizin):print ‘İncelenen klasör : ‘,yolfor dosya in dosyalar:print ‘—->İncelenen dosya:’,dosyatamDosyaYolu = path.join(yol,dosya)if dosya[-3:] == ‘jpg’:resim = Image.open(tamDosyaYolu)yeniResim = resim.resize((1024,768))yeniResim.save(path.join(yol,’boyutlandi_’+dosya)
Şimdi kodumuzu açıklayalım:3 ve 4. satırlarda gerekli olacak olan modülleri tanımladık6. satırda programın tarayacağı kök dizini belirledik.9. satırda kök dizinden itibaren bütün dizinlere bakmaya başladık. Burada Kullanmış olduğumuz walk nesnesi, iterasyon yaparak tarama işlemi yapan bir jeneratör nesnesidir. Bu nesne geriye 3’lü bir tuple (tüp) döndürür.
10. satırda o an için taranan klasör ekrana yazılır.11. satırda o an taranan klasörün dosyalarına bakar.13. satırda dosyanın tam yol (path) bilgisini oluşturuyoruz. Bu, dosyaya erişirken gerekli olacak.14. satırda sadece jpg uzantılı dosyalarda işlem yapacağımızı ayarlıyoruz. çünkü klasörlerin içinde başka dosyalar olabilir. örn: thumbs.dbgeri kalan satırlarda ise resmi boyutlandırıp başka bir isimle kaydediyoruz.Bu programı linux işletim sistemi üzerinde çalıştırmak isterseniz:kok_dizin = ‘C:\resimler’komutunu,kok_dizin = ‘/home/resimler’gibi (örneğin) değiştirebilirsiniz.bu kadar kolay 🙂