Есть ли лучший способ удалить файлы, которые старше месяца в Python? - PullRequest
1 голос
/ 15 декабря 2011

Я создал скрипт, который ежедневно генерирует файлы и называет их по дате их создания.Однако мне нужно удалить эти файлы через 1 месяц, и я обнаружил, что это немного сбивает с толку.Я считаю, что следующее будет работать, но я хотел бы знать, есть ли в Python встроенная функция, которая позволяет сделать это немного более Pythonicly и Elegently.

Обратите внимание, что этот код обрабатывает файлы, которые находятся в концемесяц, в котором больше дней, чем в следующем месяце, путем удаления всех файлов за последний месяц, когда он достигнет последнего дня этого месяца.

if today.month != 1:
    if today.day == days_in_month[today.month] and days_in_month[today.month] < days_in_month[today.month - 1]:
        for x in range(days_in_month[today.month],days_in_month[today.month-1]+1):
            date = date(today.year,today.month-1,x)

            fname = str(date)+".stub"
            remove(fname)
else:
    date = date(today.year-1,12,x)

    fname = str(date)+".stub"
    remove(fname)

Ответы [ 2 ]

5 голосов
/ 15 декабря 2011

Взгляните на модуль Python datetime , в нем есть несколько классов, которые должны значительно упростить это. Вы должны иметь возможность создать объект datetime.datetime из имени вашего файла, используя datetime.datetime.strptime(), а другой объект для текущего времени, используя datetime.datetime.now(). Затем вы можете вычесть одно из другого, чтобы получить объект datetime.timedelta, который можно использовать для определения разницы между датами.

4 голосов
/ 15 декабря 2011

Вместо просмотра имен файлов для определения возраста, вы можете использовать время создания.

Что-то вроде:

import os
import datetime

path = "/path/to/files"    

for file in os.listdir(path):
    fullpath   = os.path.join(path,file)    # turns 'file1.txt' into '/path/to/file1.txt'
    timestamp  = os.stat(fullpath).st_ctime # get timestamp of file
    createtime = datetime.datetime.fromtimestamp(timestamp)
    now        = datetime.datetime.now()
    delta      = now - createtime
    if delta.days > 30:
        os.remove(fullpath)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...