首页 > 解决方案 > 如何将连续编号的数组转换为时间戳

问题描述

我正在设备上收集数据,每秒更新一次计数并记录它。我现在正在处理它,并且是 python 的新手,所以我有一个问题,例如是否可以将编号数组[0,1,2,3,4,...1091,1092,1093,...]转换为时间戳[00:00:01, 00:00:02, 00:00:03, 00:00:04, ... 00:18:11, 00:18:12, 00:18:13,...]

如果您能引导我朝着正确的方向前进,那将不胜感激!

ps 将来,我会将数据记录为时间戳,但现在,我有 5 小时的数据需要处理!

标签: python-3.x

解决方案


如果你只有秒,那么你可以做简单的算术将它们转换为分钟和小时:

inp = [0, 1, 2, 3, 4, 1091, 1092, 1093]
outp = [f'{secs // 3600:02}:{(secs // 60) % 60:02}:{secs % 60:02}' for secs in inp]
print(outp)
# ['00:00:00', '00:00:01', '00:00:02', '00:00:03', '00:00:04', '00:18:11', '00:18:12', '00:18:13']

在这里,我使用列表推导,并为secs输入中的每一个创建一个格式字符串:

  • 小时是secs // 3600(这是整数下除法),因为一小时是 3600 秒
  • 分钟是(secs // 60) % 60(这包含了模运算符,它显示secs // 60再次除以 60 后的余数)。一分钟是 60 秒,但超过 60 分钟就是一个小时,所以我们需要确保每 60 分钟“翻转”一次计数器(这就是 mod 的用途)。
  • 秒当然是secs % 60,因为一分钟有 60 秒,我们希望计数器翻转。

格式字符串以 开头f',其中的任何内容{}都是评估其中内容并将其插入字符串的指令。语法是{expression:format},其中display是关于如何格式化数据(即不仅仅是打印出来)的可选指令。并且format可能会变得复杂(如果您对细节感到好奇,请查看 python f-string 教程),但只要说在这种情况下我们使用 就足够了02,这意味着我们希望输出长度为两个字符,并且用零填充以防它小于该值。


推荐阅读