探索 Python 库:Arrow
介绍
作为 Python 用户,您可能在处理日期和时间格式时遇到很多麻烦,例如将一种日期时间格式转换为另一种时区格式,使用手动构建的函数来改变天、小时、分钟等。您可能最终会使用许多库,例如datetime、time、dateutil等,但仍然需要编写大量额外的代码。相反,如果您学习一个库,它提供了所有主要的库功能,最重要的是,它提供了额外的功能,让您可以减少代码编写量,那会怎样?
在本指南中,您将通过探索以下主题来了解Arrow库:
- 建筑数据
- 处理数据
- 人性化数据
- 提取数据
- 语言转换
在深入研究这些主题之前,您应该使用命令pip install arrow安装 Arrow 库。本指南中的所有代码示例都假定您已使用命令import arrow导入了该库。
建筑数据
如果您想要获取某个时区的时间戳,请在now()函数中提及其表达式。表达式可以是US/Pacific、US/Mountain、Europe/Berlin等。如果您未在now()函数中提及时区,您将收到时区的数据。下面是一个获取时间戳并提取其各个组成部分(如小时、天、秒等)的示例。
arw = arrow.now('Europe/Berlin')
print(arw)
# 2020-06-08T23:03:01.688314+02:00
print( arw.day, arw.month, arw.year, arw.hour, arw.minute, arw.second )
# (8, 6, 2020, 23, 6, 56)
接下来,尝试使用get()函数将时间戳值转换为箭头时间戳。原始时间戳可以是int或float数据类型。
arw = arrow.get(1592901654)
print(arw)
# 2020-06-23T08:40:54+00:00
处理数据
有时您可能会得到错误的数据,或者您可能想要完全更新时间戳。无论是哪种情况,您都可以直接使用 Arrow 的replace()和shift()函数执行此类操作。
这里有几个有趣的例子来解释这两种功能。
您之前的马拉松数据库的最佳记录时间为 2:19:10。现在,一位新跑步者打破了记录,将其设置为 2:09:10。您将如何更新数据库中的新记录?在继续之前,请注意,除分钟外,两条记录中的小时和秒数据都是相同的。因此,您只需要更新分钟数据:
arw = arrow.get(1592705950)
print(arw, '|', arw.replace(minute=9))
# 2020-06-21T02:19:10+00:00 | 2020-06-21T02:09:10+00:00
假设雨季从今天开始,并且可能持续到接下来的两周。你有今天的时间戳,如何将其更新到接下来的两周?好吧,你可以使用 shift ()函数为你进行计算,如本例所示:
arw = arrow.get(1592705950)
print(arw, '|', arw.shift(weeks=2))
# 2020-06-21T02:19:10+00:00 | 2020-07-05T02:19:10+00:00
人性化数据
您是否曾想过,是否可以以“两天后”而不是“2020-05-25T14:45:53.516031-07:00”的格式接收时间和日期?除了这个小例子,您还可以做更多的事情。Arrow 库通过结合语言(不仅仅是英语!)和数字为您提供了保留日期和时间的好处。以下是一些示例,解释了 humanize ()函数如何节省您读取日期和时间的时间:
arw = arrow.now('US/Pacific')
print(arw.humanize())
# just now
arw = arw.shift(weeks=-2)
print(arw)
print(arw.humanize())
# 2 weeks ago
arw = arw.replace(minute=30)
print(arw.humanize()) # No change
# 2 weeks ago
arw = arw.shift(years=+4)
print(arw.humanize(granularity=["year", "day", "hour", "minute"]))
# in 3 years 351 days 5 hours and 47 minutes
正如您在代码的最后一行中看到的,您可以精确选择结果应以哪个时间范围形成。默认情况下,它将是您更改的最后一个粒度,否则它将遵循函数中提到的粒度。
提取数据
假设您有一个句子,其中包含需要提取的日期或时间值。通常,您可能会编写正则表达式来匹配记录并获取数据。但是,Arrow 库会为您处理这个问题。使用基本的get()函数以及格式,您将收到如下所示的数据:
sentence = "I went to picnic with my college friends on 2020-01-28. We all spent a good time together"
arw = arrow.get(sentence, "YYYY-MM-DD")
print(arw)
# 2020-01-28T00:00:00+00:00
对于更复杂的数据,您仍然可以依靠正则表达式来提取数据,如下所示:
sentence = "I went to picnic with my college friends on 2020 Jan 28 8 o'clock. We all spent a good time together"
fmt = r"YYYY[\s+]MMM[\s+]DD[\s+]H"
print(arrow.get(sentence, fmt))
# 2020-01-28T08:00:00+00:00
在上面的例子中,数据被随机空格分隔,但我们仍然可以提取它。请确保使用正确的令牌。请参阅此处了解支持的令牌。
语言转换
Arrow 库有一个专用模块locales.py,支持多种语言来显示最终结果。在此示例中,选择了法语和希腊语来显示其正常运行:
arw = arrow.utcnow()
print(arw.shift(years=5, months=8, weeks=1).humanize(granularity=['year', 'day','month','minute','second'], locale='en'))
# in 5 years 8 months 7 days 1080 minutes and 0 seconds
arw = arrow.utcnow()
print(arw.shift(years=5, months=8, weeks=1).humanize(granularity=['year', 'day','month','minute','second'], locale='fr'))
# dans 5 ans 8 mois 7 jours 1080 minutes et 0 quelques secondes
arw = arrow.utcnow()
print(arw.shift(years=5, months=8, weeks=1).humanize(granularity=['year', 'day','month','minute','second'], locale='el'))
# σε 5 χρόνια 8 μήνες 7 μέρες 1080 λεπτά και 0 δευτερόλεπτα
结论
Arrow 库为您提供与日期和时间数据相关的所有问题的一站式解决方案。它结合了各种库的功能,并提供了一个附加模块locale,以根据您的语言要求显示结果。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~