(Python实战文)一篇文章教会你Arrow 时间库在项目中的实际应用

Karen110 等级 629 0 0

忆君迢迢隔青天,昔日横波目,今作流泪泉。

Python 默认支持时间序列的库有很多,通常 time 和 datetime 是用的最多的,虽然他们在一般情形下绝对够用,但是总有一些比较奇葩的时间格式的需求,而我们也就不能仅限于这两个 Python 自带的库。

(Python实战文)一篇文章教会你Arrow 时间库在项目中的实际应用

DateParser 和 Dateutil

这是两款比较友好的用于处理各种时间格式的第三方库,它能将各种奇怪写法的时间转换成标准的时间格式,比如:

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

碰到个需求

最近在做一些自动化文件导出的时候,由于有一些平台有导出的数量限制,比如某某平台如果所选时间是半年,然后累计数据量达到 50w,就会导出失败。

对于这种情况就要做一下时间切分,比如可以分为按月,甚至按周来进行导出,也就是 rangeTime。

当在 Google 上搜索 Python time 或者 Datetime 切分时间的时候发现并没有什么结果,然后就会想起有个更牛的处理时间的库,也就是 Arrow 了。

很多的博客对 Arrow 的讲解也都是一带而过,贴出官方的例子,并没有应用于实际的项目,所以更多 Arrow 的用法也就没有提到。

(Python实战文)一篇文章教会你Arrow 时间库在项目中的实际应用

Arrow

和 DateParser 一样,Arrow 底层也是用 datetime 封装的,在特定的地方可以和 datetime 进行交互。

一些用法展示:

# -*- 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') 转换为你想要的时间格式  

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

# 配合使用,链式法则  
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 的时间区间属性可以在一段时间中根据不同时间粒度来进行切分,来达到我们的需求。

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


# 开始于当前时间,往前推 120 天  
end = datetime.datetime.now()  
start = end + datetime.timedelta(days=-120)  

# 获取 120 内的时间范围,以月划分  
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 内的时间范围,以周划分  
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  

# 自定义时间格式,按月划分,结果为 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())

这样一来就可以满足我们的需求,并且保证在特定时间区间内不会重复天数(或者更小的时间粒度),不要使用很多很多的时间处理库,用的越多也就更加错综复杂,有那么一两款好用,易用的时间库足矣,哈哈 !!

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

(Python实战文)一篇文章教会你Arrow 时间库在项目中的实际应用

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/WDbourh6lo2E5ho6DjOMJQ,如有侵权,请联系删除。

收藏
评论区

相关推荐

14. Python 与数据库那点事儿,滚雪球学 Python
本篇文章将给大家介绍 Python 如何操作 SQLite 数据库,本文将是滚雪球学 Python 第一阶段的倒数第二篇文章。 <center<font color
15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工
本篇文章将给大家介绍 Python 多线程与多进程相关知识,学习完该知识点之后,你的 Python 程序将进入另一个高峰。 <center<font colorred缓解一下视疲劳</font</center 15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工(https://imghelloworld.oss
原来Python绘图也可以这么漂亮,这次真的是学习到了!
(https://imghelloworld.osscnbeijing.aliyuncs.com/8830803f033eeed85783e9058cf08968.png) 作者:朱小五 来源:快学Python 👆人生苦短,快学Python! 最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介
「Vue — 插件」PDF预览vue-pdf
样式如图:1:npm install save vuepdf2:在需要使用的页面中 js<div class"page"{{currentPage}}/{{pageCount}}</div<div class"pdf" <span @click"changePdfPage(0)" class"arrow" :class"{g
为啥要学Python?
为啥要学Python?如果我跟你说你现在用一天拉出来的财务统计表,学了Python之后能用1个小时就搞定,你学不学?如果你花了8个小时扒的竞品投放数据,学了Python之后能用30min搞定,你学不学?你总羡慕你的同事能6点下班,陪女朋友蹦迪夜生活丰富,你却在满脸油头的爆肝加班,学了Python之后,你也能这样,你学不学?如果我跟你说,学会了Python能增
python文件的第一行 #!/usr/bin/python3 是什么意思?
python文件的第一行代码通常在脚本语言的第一行会看到: !/usr/bin/env python或 !/usr/bin/python 首先要确定的一点是它不是注释。这两句话的目的都是指出你的python文件用什么可执行程序去运行它。1. !/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释
简述Python中常见的数据结构
「数仓宝贝库」,带你学数据!导读:Python中常见的数据结构有列表(list)、元组(tuple)、集合(set)、字典(dict)等,这些数据结构表示了自身在Python中的存在形式,在Python中可以输入type(对象)查看数据类型。 1列表 (1)创建列表 列表是Python内置的一种数据类型,它是一种有序的数据集合,是用于存储一连串
Python报表自动化
Python 报表自动化/袁佳林这篇文章是『读者分享系列』第二篇,这一篇来自袁佳林同学,这是他在读完我的书以后做的第一个Python报表自动化项目,现在他把整体的思路以及实现代码分享出来,希望对你有帮助。 你还可以看『读者分享系列』的第一篇:1.案例场景作为企业的数据统计岗,每天都需要做很多报表,日报、周报、季报、月报。如果我们能利用Python的数据分析
60行Python代码开发在线markdown编辑器
本文转载自公众号【python大数据分析】,详情可以点击上方卡片,关注该公众号,获取更多好文推荐。 ❝ 本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ❞1 简介这是我的系列教程「Python+Dash快速web应用开发」的第六期,在上一期的文章中,我们完成了对
初窥 Python 的 import 机制
本文适合有 Python 基础的小伙伴进阶学习。 作者:pwwang一、前言本文基于开源项目: https://github.com/pwwang/pythonimportsystem补充扩展讲解,希望能够让读者一文搞懂 Python 的 import 机制。 1.1 什么是 import 机制?通常来讲,在一段 Python 代码中去执行引用另一个模块中
一行代码将Python程序转换为图形界面应用
Gooey项目支持用一行代码将(几乎)任何Python 2或3控制台程序转换为GUI应用程序。1.快速开始开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章: 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:,它内置了Python和pip.此外,推荐大家用VSCode编辑器,它有许多的优点:。
求求你调试Python代码,不要再用Print了!
相信大部分人学习Python,肯定会用print()这个内置函数,来调试代码的。 那么在一个大型的项目中,如果你也是使用print来调试你的Python代码,你就会发现你的终端有多个输出。 那么你便不得不去分辨,每一行的输出是哪些代码的运行结果。 举个例子,运行下面这个程序。 num1  30 num2  40  print(num1
建议收藏,22个Python迷你项目(附源码)
在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作。 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程。 大家也可根据项目的目的及提示,自己构建解决方法,提高编程水平。 ① 骰子模拟器 目的:创建一个程序来模拟掷骰子。 提示:当用户询问时,使用random模块生成一个1到6之间
25条很棒的Python一行代码,建议收藏!
自从我用Python编写第一行代码以来,就被它的简单性、出色的可读性和特别流行的一行代码所吸引。 在下面,我将给大家介绍并解释一些Python一行程序。 可能有些你还不知道,但对你未来的Python项目很有用。 ▍1、交换两个变量  a  4 b  5 a,b  b,a  print(a,b)  5,4 让我们通过交换两个变量作为一个简
(Python实战文)一篇文章教会你Arrow 时间库在项目中的实际应用
忆君迢迢隔青天,昔日横波目,今作流泪泉。 Python 默认支持时间序列的库有很多,通常 time 和 datetime 是用的最多的,虽然他们在一般情形下绝对够用,但是总有一些比较奇葩的时间格式的需求,而我们也就不能仅限于这两个 Python 自带的库。 DateParser 和 Dateutil 这是两款比较友好的用于处理各种时间格式的第三方库