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.
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)]
]
)