gpt4 book ai didi

python - python中方便的时间字符串解析

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:08 25 4
gpt4 key购买 nike

我需要计算从特定日期到现在的持续时间以进行elasticsearch索引清理。我的工作将在 python 中运行。我有一个配置文件:

indices:
- name: test
template: raw*
liveLength: 1d

如何将字符串“1d”或“2m”解析为有效的时间间隔,以计算 liveLength 字段中特定日期的持续时间?

最佳答案

您可以使用正则表达式来提取数字/时间单位部分,然后在字典中查找乘数。这样,它比 your 更短,并且可能更具可读性。手动解析和 if/elif 链。

>>> mult = {"s": 1, "m": 60, "h": 60*60, "d": 60*60*24}
>>> s = "2d 4h 13m 5.2s"
>>> re.findall(r"(\d+(?:\.\d)?)([smhd])", s)
[('2', 'd'), ('4', 'h'), ('3', 'm'), ('5.2', 's')]
>>> sum(float(x) * mult[m] for x, m in _)
187385.2

作为函数:

def duration(string):
mult = {"s": 1, "m": 60, "h": 60*60, "d": 60*60*24}
parts = re.findall(r"(\d+(?:\.\d)?)([smhd])", string)
total_seconds = sum(float(x) * mult[m] for x, m in parts)
return timedelta(seconds=total_seconds)

print(duration("2d 4h 13m 5.2s"))
# 2 days, 4:03:05.200000

这还将确保数字部分实际上是一个有效的数字(而不仅仅是任何数字和点的序列)。此外,如果使用允许的时间单位以外的任何时间单位,它将引发异常。

可以通过在函数外部使用 re.compile 预编译正则表达式来进一步优化该函数。当我使用 IPython 的 %timeit 对其进行测试时,我的速度更快一些(2.1μs 与你的 2.8μs 相比,两者都没有 timedelta 创建并且仅使用 浮点而不是十进制)。另外,我认为通过更多的声明性和更少的命令性风格来提高可读性,但这肯定是品味和偏好的问题。

关于python - python中方便的时间字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com