Преобразовать строку чисел в объект 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)]:
Другие вопросы по тегам