Bu makalemizde python’da iç içe klasör oluşturma(subfolder and folders) konusundan bahsediyor olacağım.
Bilgisayarda çoğu zaman kullandığımız ama arka tarafında nasıl bir işlem olduğunu bilmediğimiz klasörleme ve alt klasörlerme yapısını; yıl, ay ve günlerin birbiri içinde sıralandığı bir klasörleme yapısnı oluşturacağız.
import os from datetime import datetime simdikiTarih=datetime.now() #print(simdikiTarih) yol="D:\\Evraklarim" yilKlasoru=f"{yol}\\{simdikiTarih.year}" ayKlasoru=f"{yilKlasoru}\\{simdikiTarih.month}" gunKlasoru=f"{ayKlasoru}\\{simdikiTarih.day}" klasorler=[yilKlasoru,ayKlasoru,gunKlasoru] for klasor in klasorler: if not os.path.exists(klasor): os.mkdir(klasor)
Bu kod, şu anki yıl, ay ve günü kullanarak, belirtilen yol altında yıl, ay ve gün klasörlerini oluşturur. f karakteri, süslü parantez içindeki ifadeleri işlemek için kullanılır. Kodu çalıştırdıktan sonra, D Diskinin altında yıl, ay ve gün klasörlerinin oluşturulduğunu göreceksiniz. Eğer farklı bir tarih için klasörler oluşturmak isterseniz, now değişkenini değiştirerek yapabilirsiniz.
şimdi ise sadece 2022 ve 2023 yılları arasında olan tüm ayları içerisindeki günleri de yazarak bir klasörleme yapısını oluşturalım burada dikkat etmenizi çekeceğim konu, ocak 31 gün, şubat ayının 28 gün olması gibi durumları da göz ardı etmemektir.
import os # Klasörlerin yolu ve adlarını belirleyin baseKlasor = r'D:\Evraklarim' Klasorler = [baseKlasor] # Yıl klasörlerini oluşturun for yil in range(2023, 2024): yilKlasoru = f'{baseKlasor}\\{yil}' Klasorler.append(yilKlasoru) # Ay klasörlerini oluşturun for ay in range(1, 13): ayKlasoru = f'{yilKlasoru}\\{ay:02d}' Klasorler.append(ayKlasoru) # Gün klasörlerini oluşturun ayinGunleri = 31 if ay in [1, 3, 5, 7, 8, 10, 12] else 30 if ay != 2 else 28 for gun in range(1, ayinGunleri+1): try: gunKlasoru = f'{ayKlasoru}\\{gun:02d}' Klasorler.append(gunKlasoru) os.makedirs(gunKlasoru) except: pass
Bu kodda, ayın gün sayısını belirlemek için bir ayinGunleri
değişkeni kullanılır. ayinGunleri
değişkeni, if-elif-else
koşullu ifadeleriyle, ayın gün sayısını hesaplar. Şubat ayı için, gün sayısı 28 olarak belirlenir. Bu sayede, Şubat ayı için sadece 28 günün klasörü oluşturulur.
Bu kodu çalıştırdıktan sonra, D sürücüsü altında Evraklarim
klasörü oluşacak, bu klasör altında 2023 yılı klasörü, bu klasör altında 12 ay klasörü ve her ay klasörü altında o ayın gerçek gün sayısı kadar gün klasörleri oluşacaktır.
Burada kodumuzda önce yıl, ay ve sonra gün klasörlerini oluşturduk burada ayinGunleri = 31 if ay in [1, 3, 5, 7, 8, 10, 12] else 30 if ay != 2 else 28 kullandığımız bu kod yapısı çok güzel ve ileri bir yapıdadır. Ay’ın günlerini yazarken ocak,mart gibi ayların sırası gelince 31 gün, eğer 2.ay olursa yani şubat, ayinGunleri=28 atar. eğer bunların dışında ise ayinGunleri’ne =30 atar.
Burada bu ifadeden bahsetmekte fayda var {ay:02d} ifadesinde, ay değişkeninin değeri, 2 basamaklı bir sayı olarak biçimlendirilir. :02d bölümü, biçimlendirme özelliğidir. Burada, : işaretinden sonra 02 sayısı, sayının en az kaç basamaklı olacağını belirtir. Eğer sayı 2 basamaklı değilse, soluna sıfır ekleyerek 2 basamaklı hale getirilir. d harfi ise sayısal bir ifade olduğunu belirtir. Örneğin, 3 sayısı, {ay:02d} ifadesine göre 03 şeklinde biçimlendirilir. Bu ifadeyi kullanarak, örneğin 1 ayı 01, 9 ayını 09 şeklinde biçimlendirebiliriz.
yukarıdaki kodumuzu monthrange()
hazır fonksiyonunu kullanarak da şu şekilde yazabiliriz:
import os import calendar base_folder = r'D:\Evraklarim' folders = [base_folder] for yil in range(2023, 2024): yilKlasoru = f'{base_folder}\\{yil}' folders.append(yilKlasoru) for ay in range(1, 13): ayKlasoru = f'{yilKlasoru}\\{ay:02d}' folders.append(ayKlasoru) gunler = calendar.monthrange(yil, ay)[1] for gun in range(1, gunler+1): gunKlasoru = f'{ayKlasoru}\\{gun:02d}' folders.append(gunKlasoru) os.makedirs(gunKlasoru)
calendar.monthrange(yil, ay)
ifadesi, calendar
modülü altındaki monthrange()
fonksiyonunu kullanarak, belirtilen yil
ve ay
için bir tuple döndürür. Bu tuple’ın ilk elemanı, belirtilen ayın ilk gününün haftanın hangi gününe denk geldiğini gösteren bir sayıdır (Pazartesi=0, Salı=1, Çarşamba=2, vb.). İkinci elemanı ise, belirtilen ayın kaç gün çektiğini gösteren bir sayıdır.
Burada biz, monthrange(yil, ay)
ifadesinden gelen ikinci elemanı kullanarak, bir ayın kaç gün çektiğini öğreniyoruz. Bu sayede, oluşturacağımız klasörlerin sadece o ayın gerçek gün sayısı kadar olmasını sağlıyoruz. calendar
modülü, Python’ın standart kütüphanesinde bulunur ve takvim işlemleri yapmak için kullanılabilir.
0 Yorum