1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        (Python實(shí)戰(zhàn)文)一篇文章教會你Arrow 時間庫在項(xiàng)目中的實(shí)際應(yīng)用

        共 2588字,需瀏覽 6分鐘

         ·

        2020-12-18 17:36

        擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

        回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書

        憶君迢迢隔青天,昔日橫波目,今作流淚泉。

        ??? Python 默認(rèn)支持時間序列的庫有很多,通常 time 和 datetime 是用的最多的,雖然他們在一般情形下絕對夠用,但是總有一些比較奇葩的時間格式的需求,而我們也就不能僅限于這兩個 Python 自帶的庫。



        DateParser?和?Dateutil


        ????這是兩款比較友好的用于處理各種時間格式的第三方庫,它能將各種奇怪寫法的時間轉(zhuǎn)換成標(biāo)準(zhǔn)的時間格式,比如:


        #?-*-?coding:?utf-8?-*-
        #?@Time?:?2020-12-05?16:46
        import?time
        import?dateparser
        from?dateutil?import?parser

        print(dateparser.parse("2020/11/7?5:01:08"))
        print(parser.parse("2020"))



        碰到個需求


        ????最近在做一些自動化文件導(dǎo)出的時候,由于有一些平臺有導(dǎo)出的數(shù)量限制,比如某某平臺如果所選時間是半年,然后累計(jì)數(shù)據(jù)量達(dá)到 50w,就會導(dǎo)出失敗。


        ????對于這種情況就要做一下時間切分,比如可以分為按月,甚至按周來進(jìn)行導(dǎo)出,也就是 rangeTime。


        ????當(dāng)在 Google 上搜索 Python time 或者 Datetime 切分時間的時候發(fā)現(xiàn)并沒有什么結(jié)果,然后就會想起有個更牛的處理時間的庫,也就是 Arrow 了。


        ????很多的博客對 Arrow 的講解也都是一帶而過,貼出官方的例子,并沒有應(yīng)用于實(shí)際的項(xiàng)目,所以更多 Arrow 的用法也就沒有提到。




        Arrow


        ????和 DateParser 一樣,Arrow 底層也是用 datetime 封裝的,在特定的地方可以和 datetime 進(jìn)行交互。


        ????一些用法展示:

        #?-*-?coding:?utf-8?-*-
        #?@Time?:?2020-12-05?16:46
        i?=?arrow.now()

        #?i.replace(day=1)?替換時間為?1?號
        #?i.shift(months=-1)?偏移量,往前推一個月
        #?i.format('YYYY-MM-DD')?轉(zhuǎn)換為你想要的時間格式

        print(i.shift(days=-30).format('YYYY-MM-DD'))
        print(i.shift(months=-3).format('YYYY-MM-DD'))

        #?配合使用,鏈?zhǔn)椒▌t
        print(i.replace(day=1).shift(months=-1).format('YYYY-MM-DD'))
        print(i.replace(day=1).shift(months=-1).format('YYYY-MM-DD?HH:mm:ss'))


        ????回到解決剛才的那個需求,?Arrow?的時間區(qū)間屬性可以在一段時間中根據(jù)不同時間粒度來進(jìn)行切分,來達(dá)到我們的需求。


        #?-*-?coding:?utf-8?-*-
        #?@Time?:?2020-12-05?16:46
        import?arrow


        #?開始于當(dāng)前時間,往前推?120?天
        end?=?datetime.datetime.now()
        start?=?end?+?datetime.timedelta(days=-120)

        #?獲取?120?內(nèi)的時間范圍,以月劃分
        def?timeYmdRange(start=start,end=end):
        ????tRange?=?[]
        ????for?r?in?arrow.Arrow.span_range('months',?start,?end):
        ????????qTime?=?[i.format('YYYY-MM-DD')?for?i?in?r]
        ????????tRange.append(qTime)
        ????return?tRange

        #?獲取?120?內(nèi)的時間范圍,以周劃分
        def?timeWeekRange(start=start,end=end):
        ????tRange?=?[]
        ????for?r?in?arrow.Arrow.span_range('weeks',?start,?end):
        ????????qTime?=?[i.format('YYYY-MM-DD')?for?i?in?r]
        ????????tRange.append(qTime)
        ????return?tRange

        #?自定義時間格式,按月劃分,結(jié)果為?202011?
        def?timeMonthRange(start=start,end=end):
        ????tRange?=?[]
        ????for?r?in?arrow.Arrow.range('months',?start,?end):
        ????????qTime?=?r.format('YYYYMM')
        ????????tRange.append(qTime)
        ????return?tRange

        for?r?in?timeHmsRange(start,?end):
        ????print(','.join(r))

        print(timeWeekRange())


        ????這樣一來就可以滿足我們的需求,并且保證在特定時間區(qū)間內(nèi)不會重復(fù)天數(shù)(或者更小的時間粒度),不要使用很多很多的時間處理庫,用的越多也就更加錯綜復(fù)雜,有那么一兩款好用,易用的時間庫足矣,哈哈??。?/span>

        -------------------?End?-------------------

        往期精彩文章推薦:

        歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

        想加入Python學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群

        萬水千山總是情,點(diǎn)個【在看】行不行

        /今日留言主題/

        隨便說一兩句吧~~

        瀏覽 65
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品国产AⅤ一区二区三区4区 | 天天搞欧美 | 翔田千里在线一区二区三区 | 成人免费网站视频 | 岛国小电影 | 91在线青青草 | 我的上司侵犯了我 | 免费无码婬AA片在线视频下载 | 一级a做一级a做片性视频呀 | 亚洲欧美日本在线观看 |