Преобразовать строку чисел в объект datetime
Я анализирую файл.csv, который содержит столбец дат в финансовом формате datetime yyyymmdd
Мне нужно удалить выходные дни при записи некоторых строк в другой файл.
Я знаю, чтобы использовать datetime.weekdays()
а потом:
if some_datetime_object.datetime.weekday() != 6 or 1:
f.write(some_row)
однако, как бы я преобразовал строку, проанализированную из CSV в объект datetime, чтобы позволить weekday()
функция, которая будет использоваться.
3 ответа
Ты можешь использовать datetime.datetime.strptime
:
import datetime
#example date strings
date1 = "20120423"
date2 = "2015-04-23"
datetime_object_1 = datetime.datetime.strptime(date1, '%Y%m%d')
datetime.datetime(2012, 4, 23, 0, 0)
datetime_object_2 = datetime.datetime.strptime(date1, '%Y-%m-%d')
datetime.datetime(2012, 4, 23, 0, 0)
Загляните внизу этой страницы, чтобы увидеть все возможные директивы для форматера этой функции. Вы можете проанализировать практически любую строку с данными даты / времени, используя strptime
метод.
Вы можете конвертировать в объект datetime, используя strptime
, Отсюда вы можете использовать weekdays
метод.
Тем не менее, ваши условия являются неточными, если вы хотите сохранить только с понедельника по пятницу. Обратите внимание, что weekday
возвращает целое число от 0 до 6 с понедельником 0 и воскресеньем 6
Возвращает день недели как целое число, где понедельник равен 0, а воскресенье - 6.
Это означает, что вы хотите проверить, является ли возвращаемое значение 5
или же 6
,
Условное у вас не будет работать по другой причине.
if some_datetime_object.datetime.weekday() != 6 or 1:
Это говорит о том, что будний день НЕ воскресенье или правда. Вы замыкаете свое условие и заставляете все быть True
, Вам нужно сделать что-то вроде этого (с соответствующими корректированными значениями)
if some_datetime_object.datetime.weekday() != 6 and some_datetime_object.datetime.weekday() != 1:
Я сделал это по-другому в коде ниже, используя not in
if datetime.datetime.strptime(d, '%Y%m%d').weekday() not in (5,6):
import datetime
dates = [
"20150801",
"20150802",
"20150803",
"20150804",
"20150805",
"20150806",
"20150807",
"20150808",
"20150809",
]
for d in dates:
if datetime.datetime.strptime(d, '%Y%m%d').weekday() not in (5,6):
print d
Это выводит:
20150803
20150804
20150805
20150806
20150807
from datetime import datetime
date_string = '20150501'
some_datetime_object = datetime(int(date_string[:4]), int(date_string[4:6]), int(date_string[6:]))
Ваш код, однако, не будет работать, так как это, если заявление написано неправильно. Правильный путь будет:
if some_datetime_object.datetime.weekday() not in (5,6)]: