2015-08-12 8 views
-2

Я разбираю. CSV-файл, содержащий столбец дат в формате финансового дат-времени yyyymmdd. Мне нужно удалить выходные дни, когда вы записываете некоторые строки в другой файл.преобразовать строку чисел в объект datetime

Я знаю, что использовать datetime.weekdays(), а затем:

if some_datetime_object.datetime.weekday() != 6 or 1: 
    f.write(some_row) 

Однако, как бы преобразовать строку в разобранный из CSV на объект даты и времени, чтобы функция weekday() будет использоваться.

+0

'if some_datetime_object.datetime.weekday()! = 6 или 1' не делает то, что, по вашему мнению, делает – CoryKramer

ответ

-1
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)]: 
1

Вы можете использовать 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) 

Посмотрите на нижней части этого page, чтобы увидеть все возможные директивы для форматере этой функции. Вы можете разбирать практически любую строку с данными даты/времени с помощью метода strptime.

0

Вы можете преобразовать объект 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 
Смежные вопросы