在python中解析法语日期

ags*_*udy 9 python parsing localization date internationalization

有人可以告诉我如何在Python中解析法国日期?对不起,如果问题是重复但我找不到.

这是我尝试使用dateutil解析器:

import locale
from dateutil.parser import parse as parse_dt
locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')   ## first I set locale
## locale.LC_TIME, 'fr_FR.UTF-8')
parse_dt('3 juillet',fuzzy= True)   ## don't work give the default month
## Out[29]: datetime.datetime(2014, 10, 3, 0, 0)
parse_dt(u'4 Août ',fuzzy= True)     ## same thing using another month 
Run Code Online (Sandbox Code Playgroud)

编辑:添加一些上下文:

我正在解析日期而事先不知道我的字符串的格式.想法是解析飞行中的许多日期:

parse_dt(u'Aujourd''hui ',fuzzy= True) 
parse_dt(u'Hier',fuzzy= True) 
Run Code Online (Sandbox Code Playgroud)

使用其他库编辑:

使用parsedatime库和一些正则表达式来翻译法语单词,我可以得到:

import parsedatetime
import re 
cal = parsedatetime.Calendar()
cal.parse(re.sub('juil.*' ,'jul' ,'20 juillet'))
 ((2015, 7, 20, 10, 25, 47, 4, 283, 1), 1)
Run Code Online (Sandbox Code Playgroud)

也许我应该将其概括为所有法国月份?

jfs*_*jfs 11

dateparser模块可以解析问题中的日期:

#!/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())
Run Code Online (Sandbox Code Playgroud)

它使用简单的yaml配置将日期转换为英语,并将日期字符串传递给dateutil.parser.

产量

2015-09-09
2015-07-03
2015-08-04
2015-09-08
Run Code Online (Sandbox Code Playgroud)


alv*_*vas 6

首先检查您的存储库中是否有正确的区域设置:

$ 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
Run Code Online (Sandbox Code Playgroud)

如果没有,请执行以下操作:

$ sudo locale-gen fr_FR.UTF-8
Generating locales...
  fr_FR.UTF-8... done
Generation complete.
Run Code Online (Sandbox Code Playgroud)

然后回到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)
>>>
Run Code Online (Sandbox Code Playgroud)

要使用自定义日期格式:

>>> date_txt = "3 juillet"
>>> DATE_FORMAT = "%d %B"
>>> datetime.datetime.strptime(date_txt, DATE_FORMAT)
datetime.datetime(1900, 7, 3, 0, 0)
Run Code Online (Sandbox Code Playgroud)

您会意识到,如果未指定年份,则会将其设置为默认值1900