Вычислить число дат между двумя строковыми датами и вернуть целое число - PullRequest
1 голос
/ 04 июля 2011

У меня есть набор данных файла .txt, подобный этому, с интересующим столбцом даты:

1181206,3560076,2,01/03/2010,46,45,M,F
2754630,2831844,1,03/03/2010,56,50,M,F
3701022,3536017,1,04/03/2010,40,38,M,F
3786132,3776706,2,22/03/2010,54,48,M,F
1430789,3723506,1,04/05/2010,55,43,F,M
2824581,3091019,2,23/06/2010,59,58,M,F
4797641,4766769,1,04/08/2010,53,49,M,F

Я хочу определить количество дней между каждой датой и 01/03/2010 и заменитьдата со смещением дней {0, 2, 3, 21 ...}, которая выдает такой результат:

1181206,3560076,2,0,46,45,M,F
2754630,2831844,1,2,56,50,M,F
3701022,3536017,1,3,40,38,M,F
3786132,3776706,2,21,54,48,M,F
1430789,3723506,1,64,55,43,F,M
2824581,3091019,2,114,59,58,M,F
4797641,4766769,1,156,53,49,M,F

Я пытался целую вечность, и это очень расстраивает.Я попытался преобразовать в datetime, используя метод datetime.datetime.strptime ('01 / 03/2010 ', "% d /% m /% Y"). Date (), а затем вычесть две даты, но это дает мненапример, «3 дня, 0:00:00», но я не могу получить вывод только числа!

Ответы [ 3 ]

4 голосов
/ 04 июля 2011

Разница между двумя датами составляет timedelta .Любой экземпляр timedelta имеет атрибут days, представляющий собой целочисленное значение.

1 голос
/ 04 июля 2011

Это довольно просто. Используя код, который вы дали:

date1 = datetime.datetime.strptime('01/03/2010', '%d/%m/%Y').date()
date2 = datetime.datetime.strptime('04/03/2010', '%d/%m/%Y').date()

Вы получаете два объекта datetime.

(date2-date1)

даст вам дельту времени. Ошибка, которую вы делаете, состоит в том, чтобы преобразовать эту временную дельту в строку. объекты timedelta имеют атрибут дней. Таким образом, вы можете получить количество дней, используя его:

(date2-date1).days

Создает желаемый результат.

1 голос
/ 04 июля 2011

Используя ваш ввод (немного многословно ...)

#!/usr/bin/env python

import datetime

with open('input') as fd:
    d_first = datetime.date(2010, 03, 01)
    for line in fd:
        date=line.split(',')[3]
        day, month, year= date.split(r'/')
        d = datetime.date(int(year), int(month), int(day))
        diff=d - d_first
        print diff.days

Дает

0
2
3
21
64
114
156

Посмотрите на pleac , много датПример использования Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...