有人能告诉我如何用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
编辑:添加一些上下文:
我在不事先知道字符串格式的情况下解析日期。这个想法是在飞行中解析许多日期:
parse_dt(u'Aujourd''hui ',fuzzy= True)
parse_dt(u'Hier',fuzzy= True)
使用其他库进行编辑:
使用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)
也许我应该把它推广到所有的法语月份?
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())
它使用简单的yaml配置将日期转换为英语,并将日期字符串传递给dateutil.parser
。
输出
2015-09-09
2015-07-03
2015-08-04
2015-09-08
首先检查您的repo中是否有正确的区域设置:
$ 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
。
#!/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
要安装它,请运行:
$ pip install git+https://github.com/bear/parsedatetime