#python
Вопрос:
Мне нужно запустить скрипт, в котором я должен изменить дату дня в нескольких полях кода, но у меня возникли проблемы с получением скриптом только даты дня, он получает дату только вручную в этом формате:
import datetime as date
Data_inicio = dt.date(2020,3, 1) #Ano, mês, Dia #here
Data_Fim = dt.date(2021,10,29)
Я попытался изменить код таким образом:
import datetime as date
data = date.datetime.now()
data_today = data.strftime("%Y,%m,%d")
Data_inicio = dt.date(2020,3, 1)
Data_Fim = dt.date(data_today)
или
Data_Fim = data_today
Следующая ошибка возникает в data_fim
:
files=glob.glob(url '/*' Data_inicio.strftime("%d%b%Y") '-' Data_Fim.strftime("%d%b%Y") '.txt')
files_inativos =glob.glob(url_inativos '/*' '.txt')
files = files files_inativos
AttributeError: 'str' object has no attribute 'strftime'
Комментарии:
1. вы должны были сделать, как
import datatime as datetime
вместоimport datatime as date
2. Так ли это на самом деле
datatime
? Я думаю, что это должно бытьdatetime
3.
strftime
используется для форматирования объектов datetime, поэтому он переводит вас изdatetime
str
в. Whilestrptime
используется для разбора строк в объекты datetime, поэтому он ведет вас противоположным путем. В вашем случае вы пытаетесь создатьdate
из строки вData_Fim
, но строка не может быть отформатирована в datetime, ее можно только проанализировать. Для создания из строки используйтеstrptime
4. Пожалуйста, исправьте свои операторы импорта, чтобы использовать правильные модули
Ответ №1:
Кажется, единственное, что вы хотите, это установить переменную «дата окончания» в качестве вашей data_today
, но как datetime
объект, а не строку. Проблема в том, что вы пытаетесь сделать это непосредственно из строки, но в строках нет методов для преобразования даты и времени. Чтобы использовать их, вы можете использовать datetime.strptime()
, например:
from datetime import datetime
date_today = datetime.today().strftime("%Y, %m, %d")
start_date = datetime(2020, 3, 1)
end_date = datetime.strptime(date_today, "%Y, %m, %d")
Это создает строку для «сегодня» (с именем date_today
), создает datetime
объект для начальной даты (с именем start_date
), затем создает переменную конечной даты ( end_date
), которая фактически анализируется из существующей строки. В частности, в этом случае эта строка — та, которую мы только что создали ( date_today
) .
Обратите внимание, что этот пример имеет в основном обучающие цели, поскольку нет смысла создавать строку «today» из datetime
, а затем анализировать ее обратно в datetime
объект. Синтаксический анализ имел end_date
бы гораздо больше смысла, если бы вы получали его date_today
из другого места, но с известным форматом, и в этом случае вы можете преобразовать его в datetime
объект и использовать его. Однако на самом деле вам не нужно использовать строковое представление «сегодня» в том же контексте.
Если это тот случай, когда вы определяете их в одном контексте, то, вероятно, вам вообще не нужны 2 переменные, и вы можете использовать только datetime
объект. Всякий раз, когда вам нужно распечатать его или отобразить в виде строки, вы можете отформатировать его для этого конкретного вывода. Например:
from datetime import datetime
start_date = datetime(2020, 3, 1)
end_date = datetime.today()
print(end_date.strftime("%Y, %m, %d"))
>>> 2021, 10, 29
Обратите внимание, что если вы обрабатываете даты и время, обычно лучше просто использовать datetime
объекты и форматировать их всякий раз, когда требуется выходная строка. Экономит много работы и туда и обратно форматирование-разбор-форматирование-разбор материала. Кроме того, это позволяет вам использовать временные интервалы.
Ответ №2:
Похоже, что вы создаете datetime
объект, а затем пытаетесь извлечь часть этого объекта (только date
часть). Вы можете решить эту проблему, создав экземпляр date
datetime
объекта or и извлекая нужные атрибуты:
import datetime
# Using date objects
start_date = datetime.date(year=2020, month=3, day=1)
end_date = datetime.date.today()
# Using datetime objects (will include hours, minutes, seconds...)
start_date = datetime.datetime(year=2020, month=3, day=1)
end_date = datetime.datetime.today()
# You can format either object with the `.strftime()` method
date_now = datetime.date.today()
datetime_now = datetime.date.today()
for dt in [date_now, datetime_now]:
# format and print
print(dt.strftime('%Y,%m,%d'))
# Or access the attributes directly
print([dt.year, dt.month, dt.day])
Комментарии:
1. спасибо, я ломал голову над решением.