Проблема с использованием strptime с французским форматом даты в Python 2.7.14 [duplicate]

new_list = list(old_list)

7
задан agstudy 10 October 2014 в 20:11
поделиться

3 ответа

dateparser module может анализировать даты в вопросе:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dateparser # $ pip install dateparser

for date_string in [u"Aujourd'hui", "3 juillet", u"4 Août", u"Hier"]:
    print(dateparser.parse(date_string).date())

Он переводит даты на английский язык с помощью простой yaml config и проходит строки даты на dateutil.parser .

Выход

2015-09-09
2015-07-03
2015-08-04
2015-09-08
7
ответ дан PLNech 21 August 2018 в 17:44
поделиться
  • 1
    Благодарю. Я буду принимать этот ответ, потому что он проще. – agstudy 9 September 2015 в 23:05

Сначала проверьте, есть ли у вас правильный язык в вашем репо:

$ locale -a
C
C.UTF-8
de_AT.utf8
de_BE.utf8
de_CH.utf8
de_DE.utf8
de_LI.utf8
de_LU.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX

Если нет, выполните:

$ sudo locale-gen fr_FR.UTF-8
Generating locales...
  fr_FR.UTF-8... done
Generation complete.

Затем вернитесь к python:

$ python
>>> import locale
>>> import datetime
>>> locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
'fr_FR.UTF-8'
>>>
>>> date_txt = "Dimanche 3 Juin 2012"
>>> DATE_FORMAT = "%A %d %B %Y"
>>> datetime.datetime.strptime(date_txt, DATE_FORMAT)
datetime.datetime(2012, 6, 3, 0, 0)
>>>

Использовать формат даты:

>>> date_txt = "3 juillet"
>>> DATE_FORMAT = "%d %B"
>>> datetime.datetime.strptime(date_txt, DATE_FORMAT)
datetime.datetime(1900, 7, 3, 0, 0)

Вы поймете, что если год указан ниже, он установлен по умолчанию в 1900.

1
ответ дан alvas 21 August 2018 в 17:44
поделиться
  • 1
    Благодарю. Я забываю упомянуть, что перед разбором я не знаю точного формата. Я также могу получить что-то вроде Aujourd'hui или hier. Похоже, я должен сделать свой личный перевод словаря. – agstudy 10 October 2014 в 09:06
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import parsedatetime as pdt # $ pip install parsedatetime pyicu

calendar = pdt.Calendar(pdt.Constants(localeID='fr', usePyICU=True))
for date_string in [u"Aujourd'hui", "3 juillet", u"4 Août", u"Hier"]:
    dt, success = calendar.parseDT(date_string)
    if success:
       print(date_string, dt.date())

Выход

3 juillet 2015-07-03
4 Août 2015-08-04

Aujourd'hui, Hier не распознаются (parsedatetime 1.4).

Текущая версия github (будущее 1.5) поддерживает настройку дня смещения. Его можно использовать для анализа Aujourd'hui, Hier:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import parsedatetime as pdt

class pdtLocale_fr(pdt.pdt_locales.pdtLocale_icu):
    def __init__(self):
        super(pdtLocale_fr, self).__init__(localeID='fr_FR')
        self.dayOffsets.update({u"aujourd'hui": 0, u'demain': 1, u'hier': -1})

pdt.pdtLocales['fr_FR'] = pdtLocale_fr

calendar = pdt.Calendar(pdt.Constants(localeID='fr_FR', usePyICU=False))
for date_string in [u"Aujourd'hui", "3 juillet", u"4 Août", u"Hier",
                    u"au jour de hui", u"aujour-d’hui",
                    u"au-jour-d’hui", "demain", "hier",
                    u"today", "tomorrow", "yesterday"]:
    dt, rc = calendar.parseDT(date_string)
    if rc > 0:
       print(date_string, dt.date())

последняя версия

Выход

Aujourd'hui 2014-10-11
3 juillet 2015-07-03
4 Août 2015-08-04
Hier 2014-10-10
demain 2014-10-12
hier 2014-10-10
today 2014-10-11
tomorrow 2014-10-12
yesterday 2014-10-10

To установите его, запустите:

$ pip install git+https://github.com/bear/parsedatetime
4
ответ дан jfs 21 August 2018 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: