dateparser時間標(biāo)準(zhǔn)化包

這個文章 只是修改包的中文字典以更好地適應(yīng)中文時間表達,具體項目地址見下方:

https://github.com/scrapinghub/dateparser

我用的版本是py3.6 dateparser.version=0.71 修改教程適用py3,py2因為語法問題dateparser曾經(jīng)改版過大部分不適用,不過修改原理差不多。

安裝包

pip3 install dateparser

使用舉例

import dateparser
dateparser.parse('3天前')
#ountput > datetime.datetime(2019, 6, 15, 9, 17, 56, 264430)
dateparser.parse('2019年6月10日12時6分')
#ountput > datetime.datetime(2019, 6, 10, 12, 6)
dateparser.parse('2019-6-19 15:12:12')
#ountput > datetime.datetime(2019, 6, 19, 15, 12, 12)

適應(yīng)"秒"

默認(rèn)的中文字典沒辦法正確識別到秒位,比如:

dateparser.parse('2019年6月10日12時6分')
datetime.datetime(2019, 6, 10, 12, 6)
dateparser.parse('2019年6月10日12時6分5秒')
datetime.datetime(2019, 6, 18, 9, 39, 29, 571121)

字典里缺乏“年月日時分秒”這種表述規(guī)則,所以第二時間標(biāo)準(zhǔn)化出錯了。
解決辦法:

image.png

在源碼包里找到
datepatser->data->date_translation_data->zh.py
image.png

可以看到這里是一些映射規(guī)則,在最后的"simplifications"中加一行值

{ "(\\d+)年(?:\\s+)?(\\d+)月(?:\\s+)?(\\d+)日(?:\\s+)?(\\d+)時(?:\\s+)?(\\d+)分(?:\\s+)?(\\d+)秒": "\\1-\\2-\\3 \\4:\\5:\\6" },

這一行東西前面的key是時間字符串的正則表達式,后面表示正則表達式提取出來的值的表現(xiàn)形式,這里是表示成標(biāo)準(zhǔn)的時間字符串“Y-m-d H:M:S”,需要增加其他規(guī)則可同理增加,修改后的上述標(biāo)準(zhǔn)化結(jié)果為:

dateparser.parse('2019年6月10日12時6分5秒')
#ountput  > datetime.datetime(2019, 6, 10, 12, 6, 5)

輔助適應(yīng)

下面是微博的一些時間字符串

time_str = ["6月17日 19:35",
            "今天 11:41",
            "12分鐘前",
            "1992年6月17日 19:35",
            "昨天 12:41",
            "現(xiàn)在"]
for t_str in time_str:
    print(dateparser.parse(t_str))
>> 2017-06-18 19:35:00 #錯
>> 2019-06-18 11:41:00 #對
>> 2019-06-18 15:19:34.231664 #對
>> 1992-06-17 19:35:00 #對
>> 2019-06-17 12:41:00 #對
>> 2019-06-18 15:31:34.239665 #對

像這種況情會發(fā)生很多,每個產(chǎn)品都有自己的風(fēng)格(中文博大精深,你發(fā)現(xiàn)前面“情況”兩個字調(diào)轉(zhuǎn)了嗎,哈,調(diào)皮一下)
比較簡便的方法是使用date_formats參數(shù)

date_formats = ["%m月%d日 %H:%M","%m%d%Y"]
time_str = ["03121997",
            "6月17日 19:35",
            "今天 11:41",
            "12分鐘前",
            "1992年6月17日 19:35",
            "昨天 12:41",
            "現(xiàn)在"]
for t_str in time_str:
    print(dateparser.parse(t_str,date_formats=date_formats))
>> 1997-03-12 00:00:00
>> 2019-06-17 19:35:00
>> 2019-06-18 11:41:00
>> 2019-06-18 15:35:45.403212
>> 1992-06-17 19:35:00
>> 2019-06-17 12:41:00
>> 2019-06-18 15:47:45.421213

故意增加了一個不是很常見的時間表達,舉例通過date_formats優(yōu)化時間標(biāo)準(zhǔn)結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • SwiftDate概況 從Swift發(fā)布起,我們就沒有放棄使用Swift。 當(dāng)然,我們希望在項目能夠輕松自如地管理...
    Mee_Leo閱讀 10,337評論 1 13
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,985評論 0 9
  • 常用模塊 認(rèn)識模塊 什么是模塊 什么是模塊? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文...
    go以恒閱讀 2,171評論 0 6
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,683評論 0 4

友情鏈接更多精彩內(nèi)容