‘метод_descriptor’ объект не имеет атрибута ‘today’ [закрыто]

Вопрос или проблема

Я пытаюсь перечислить старые файлы, дата которых старше сегодняшней (20241029):

Например, если сегодняшняя дата 20241029, я хотел бы перечислить первые два файла с датами 20241027 и 20241028.

WH_BEE_FULL_20241027_1.bak

WH_BEE_FULL_20241028_1.bak

WH_BEE_FULL_20241029_1.bak

Ниже приведен скрипт Python, который я пытался заставить работать:

import os
import datetime
from datetime import datetime

def filter_dates_older_than_today(date_list):
    today = datetime.date.today()
    todayStr = str(today)
    nonhyphen_today = todayStr.replace('-','')  
    return [date for date in date_list if date <  
       datetime.datetime.strptime(nonhyphen_today,"%Y%m%d")] 

folder = "C:\\MyDoc"
dates = os.listdir(folder)

older_dates = filter_dates_older_than_today(dates)
print(older_dates)

Я пытался сделать обе переменные ‘today’ и ‘datetime.datetime.strptime(nonhyphen_today,”%Y%m%d”)’ работающими, но не могу удовлетворить обе.

При ‘datetime.datetime.strptime(nonhyphen_today,”%Y%m%d”)’ я пытаюсь преобразовать строку в datetime, чтобы я мог использовать < .

Когда я запустил это, я получил ошибку:

'method_descriptor' object has no attribute 'today'

.

Ответ или решение

Ошибка 'method_descriptor' object has no attribute 'today' в приведённом вами фрагменте кода возникает из-за неправильного импорта или обращения к функции today, которая должна быть частью класса datetime.date. Давайте подробно разберемся в вашем коде и исправим его.

Контекст ошибки

В вашем коде вы используете два раза datetime: один раз вы импортируете всю библиотеку как import datetime, а затем отдельно импортируете класс datetime из модуля datetime с помощью from datetime import datetime. Это создает путаницу.

Когда вы пишете today = datetime.date.today(), интерпретатор ищет метод today у объекта datetime.date. Ошибка 'method_descriptor' object has no attribute 'today' указывает на то, что интерпретатор не может найти этот метод, потому что происходит путаница в импортах.

Исправленный код

Давайте исправим ваш код следующим образом:

import os
from datetime import date, datetime

def filter_dates_older_than_today(date_list):
    # Получаем сегодняшнюю дату
    today = date.today()
    todayStr = str(today)
    nonhyphen_today = todayStr.replace('-', '')  # Убираем дефисы из даты
    # Формируем список дат, старше сегодняшней
    return [date for date in date_list if date < nonhyphen_today]

folder = "C:\\MyDoc"
dates = os.listdir(folder)

# Преобразуем имена файлов в список дат
dates = [file.split('_')[2] for file in dates if file.endswith('.bak')]  # Извлекаем дату из названия файла
older_dates = filter_dates_older_than_today(dates)
print(older_dates)

Объяснение исправлений

  1. Упрощение импорта: Вместо import datetime и from datetime import datetime, мы используем только from datetime import date, datetime. Это упрощает код и устраняет возможную путаницу.

  2. Форматирование дат: Теперь мы извлекаем дату непосредственно из названий файлов, используя метод split по символу _. Обратите внимание, что мы предполагаем, что имя файла всегда будет в формате, в котором дата находится на третьем месте.

  3. Проверка типа файла: Мы добавили условие для проверки, что файл заканчивается на .bak, чтобы исключить из анализа все лишние файлы.

Примечания

  1. Проверка ошибок: Убедитесь, что в папке "C:\\MyDoc" есть файлы в ожидаемом формате. Если нет, то ваш код может выдавать пустой результат.

  2. Тестирование: Рекомендуется тестировать код на реальных данных, чтобы убедиться в его правильной работе.

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

Оцените материал
Добавить комментарий

Капча загружается...