time.ctime()
возвращает строку, а не объект datetime. См. документацию .
Но почему вы все равно используете time.ctime()
?
os.path.getctime()
возвращает время как метку времени Unix. Вы можете преобразовать это в дату и время, используя datetime.datetime.utcfromtimestamp()
, т.е.
datetime.datetime.utcfromtimestamp(os.path.getctime(foundfile)))
. Это можно использовать напрямую по сравнению с другими объектами даты и времени. Другие ответы работают, но они конвертируют метку времени (с плавающей точкой) в строку в дату и время, тогда как мы пропускаем шаг и конвертируем непосредственно из метки времени в дату и время.
Тогда ваш код станет:
import os
import time
import datetime
for file in os.listdir('/MyDir/'):
foundfile = os.path.join('/MyDir/', file)
if file.endswith('txt') and (datetime.datetime.utcfromtimestamp(os.path.getctime(foundfile)) < (datetime.datetime.now() - datetime.timedelta(days=30))):
os.remove(os.path.join('/MyDir/', file))
Или, чтобы сделать его немного более читабельным:
import os
import datetime as dt
for file in os.listdir('/MyDir/'):
foundfile = os.path.join('/MyDir/', file)
filecreation = dt.datetime.utcfromtimestamp(os.path.getctime(foundfile))
cutofftime = dt.datetime.now() - dt.timedelta(days=30)
if (file.endswith('txt') and (filecreation < cutofftime)):
os.remove(os.path.join('/MyDir/', file))