Python strptime финский

У меня есть финское представление даты ( tiistaina, 27. lokakuuta 2015 ), что мне нужно преобразовать в объект datetime. Однако имена дней и месяцев не распознаются библиотекой datetime в Python

Я ожидал бы что-то вроде следующего:

  • Как преобразовать строку валюты в число с плавающей запятой в Python?
  • import locale from datetime import datetime locale.setlocale(locale.LC_TIME, 'fi_FI') the_date = datetime.strptime('tiistaina, 27. lokakuuta 2015', '%A, %d. %B %Y') 

    Однако это приводит к:

     Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_strptime.py", line 500, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_strptime.py", line 337, in _strptime (data_string, format)) ValueError: time data 'tiistaina, 27. lokakuuta 2015' does not match format '%A, %d. %B %Y' 

    Я думаю, что это потому, что Python ожидает, что день станет тиистаем, а не tiistai na, а месяц будет локакуу вместо lokakuu na

    http://people.uta.fi/~km56049/finnish/timexp.html, похоже, предполагает, что в зависимости от контекста существуют различные способы представления дня или месяца на финском языке.

    Как я могу использовать строку tiistaina, 27. lokakuuta 2015 для объекта datetime?

  • Как преобразовать строку валюты в число с плавающей запятой в Python?
  • 2 Solutions collect form web for “Python strptime финский”

    '%A, %d. %B %Y' '%A, %d. %B %Y' генерирует другую строку времени в моей системе:

     #!/usr/bin/env python import locale from datetime import datetime #NOTE: locale name is platform-dependent locale.setlocale(locale.LC_TIME, 'fi_FI.UTF-8') print(datetime(2015, 10, 27).strftime('%A, %d. %B %Y')) # -> tiistai, 27. lokakuu 2015 

    Вы можете использовать PyICU для анализа локализованной строки даты / времени в заданном формате :

     #!/usr/bin/env python # -*- coding: utf-8 -*- from datetime import datetime import icu # PyICU tz = icu.ICUtzinfo.getDefault() # any ICU timezone will do here df = icu.SimpleDateFormat('EEEE, dd. MMMM yyyy', icu.Locale('fi_FI')) df.setTimeZone(tz.timezone) ts = df.parse(u'tiistaina, 27. lokakuuta 2015') print(datetime.fromtimestamp(ts, tz).date()) # -> 2015-10-27 

    Связано: Дата синтаксического анализа Python и найти правильное значение locale_setting

    Это работает, но PyICU – большая зависимость, и вы должны читать документы на C ++ для большинства вещей.


    Существует модуль dateparser который должен работать, если вы добавите финские данные в простую конфигурацию yaml – подобно тому, как это делается для других языков . Вот пример для голландского языка:

     #!/usr/bin/env python import dateparser # $ pip install dateparser print(dateparser.parse(u'dinsdag, 27. oktober 2015', date_formats=['%A, %d. %B %Y'], languages=['nl']).date()) # -> 2015-10-27 

    Родственные: Парсинг французской даты в python

    Названия дней недели и месяца заменяются в именительном падеже для %A и %B соответственно; однако формат даты имеет DOW в сущностном случае, а месяц – в частичном. Склонение на финском языке довольно сложно в общем случае, но для этого случая вы можете суффикс имени DOW с na чтобы получить требуемый эссентитив, а ta – на месяц, чтобы получить частичный характер.

    Таким образом, формат strptime '%Ana, %d. %Bta %Y' '%Ana, %d. %Bta %Y' с fi_FI гарантированно будет работать на все ваши даты:

     >>> datetime.datetime.strptime('tiistaina, 27. lokakuuta 2015', '%Ana, %d. %Bta %Y') datetime.datetime(2015, 10, 27, 0, 0) 
    Python - лучший язык программирования в мире.