Tarihlerle isimlendirdiğim txt dosyalarını nasıl süzebilirim?

Bir program yazdım, hangi gün giriş yapınca o günün tarihiyle txt formatında çıktılar alabiliyorum. Kullanıcının yazdığı txt dosyalarını 2 tarih girerek o dosyaları ekrana yazdırabilmek istiyorum. Nasıl yapabilirim?

os.listdir veya glob.glob ile dosya listesini alabilirsin.

Dosyalarin ismine gore array range’leri (filename[3:5]) veya regular expressions ile isimlerden gun-ay-yil parcalarini alabilirsin.

Tarih araliklari cikartmak icin elle gun-ay hesaplamak yerine datetime modulunu kullanabilirsin.

1 Beğeni

regular expressions a çalışıyorum teşekkür ederim

O zaman dogrudan bu is icin kullandigim bir regex ile ornek vereyim:

^gelen_(?P<tag>(?P<year>\d\d\d\d)(?P<month>\d\d)(?P<day>\d\d)_(?P<time>\d\d\d\d\d\d)).csv$

Basidi

^gelen_(\d\d\d\d)(\d\d)(\d\d)_(\d\d\d\d\d\d).csv$

olurdu herhalde. (Dikkat: elle editledim, hata olabilir). Yakalama gruplarina isim verme sebebim, siralari degisirse kodda degisiklik yapmak zorunda kalmayayim. (Kod regex’in kendisinden uzakta duruyor.)

Merhaba, aşağıdaki kodları da bir inceleyin isterseniz.

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-

from datetime import datetime as dt
from datetime import timedelta as td

# Tarihlerden oluşan dates isimli bir liste tanımlandı. 
# Liste bugünün tarihini ve bugünden itibaren 30 gün içindeki 
# tarihleri içeriyor. 
dates = [
    (dt.today() + td(days=i)).strftime("%Y-%m-%d")
    for i in range(30)
]

# Her bir tarih için bir metin dosyası oluşturulur.
for i in dates:
    dosya = open(file=f"{i}.txt", mode="w", encoding="utf-8")
    dosya.close()
    
# Belirlenen iki tarih arasındaki dosyaları alalım.

baslangic = input("Başlangıç Tarihi: ")
if baslangic in dates:
    bitis = input("Bitiş Tarihi: ")
    if bitis in dates:
        print(
            [
                f"{i}.txt" 
                for i in dates[dates.index(baslangic):dates.index(bitis)]
            ]
        )

Eğer zaten isimleri tarih olan metin dosyaları varsa onları bir liste içine alıp listedeki sıralarına göre seçilen iki tarih arasındaki tarihleri alabilirsiniz.

Örneğin:

#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-

from datetime import datetime as dt
from os import listdir, path

dates = []
for i in listdir("."):
    try:
        if dt.strptime(path.splitext(i)[0], "%Y-%m-%d"):
            dates.append(path.splitext(i)[0])
    except ValueError:
        pass
dates.sort()

baslangic = input("Başlangıç Tarihi: ")
if baslangic in dates:
    bitis = input("Bitiş Tarihi: ")
    if bitis in dates:
        print(
            [
                f"{i}.txt" 
                for i in dates[dates.index(baslangic):dates.index(bitis)]
            ]
        )