<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2588字,需瀏覽 6分鐘

           ·

          2020-12-18 17:36

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

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

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

          ??? Python 默認(rèn)支持時(shí)間序列的庫(kù)有很多,通常 time 和 datetime 是用的最多的,雖然他們?cè)谝话闱樾蜗陆^對(duì)夠用,但是總有一些比較奇葩的時(shí)間格式的需求,而我們也就不能僅限于這兩個(gè) Python 自帶的庫(kù)。



          DateParser?和?Dateutil


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


          #?-*-?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"))



          碰到個(gè)需求


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


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


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


          ????很多的博客對(duì) 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)?替換時(shí)間為?1?號(hào)
          #?i.shift(months=-1)?偏移量,往前推一個(gè)月
          #?i.format('YYYY-MM-DD')?轉(zhuǎn)換為你想要的時(shí)間格式

          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'))


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


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


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

          #?獲取?120?內(nèi)的時(shí)間范圍,以月劃分
          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)的時(shí)間范圍,以周劃分
          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

          #?自定義時(shí)間格式,按月劃分,結(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())


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

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

          往期精彩文章推薦:

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

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

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

          /今日留言主題/

          隨便說一兩句吧~~

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色天堂在线观看 | 欧美一级黄色网 | 免费一级电影 | 日本a片免费视频 | 亚洲最新高清免费视频 |