我在艰难的“时间”尝试在Python中使用time
和datetime
来实现一个相当简单的目标。我已经使用过这些模块,并且已经阅读了文档,但我认为我没有以正确的方式进行。
我有一个数字信号(一个长数组),表示以给定采样率记录的时间序列,比如每秒N个样本。
我有以下格式的元组列表(虚拟数据):
[(150, 150),
(450, 90),
(750, 150),
(1050, 90),
(1350, 150),
(1650, 90),
...
(1950, 150)]
每个元组表示给定间隔的起始样本和样本数。间隔是连续的,因此起始样本是单调增加的。
我想要的是获取表示间隔开始时间和持续时间的字符串(因为每个样本具有固定的已知持续时间,由采样率确定),如下所示:
[('00:12.000', '2.245'),
('00:15.057', '2.158'),
('00:18.857', '3.045'),
etc.]
(重要提示:这些值不是用于计算,只是为了给出结构和格式的概念。值是任意类型的数字)
我可以想象通过舍入和减法以及模除法等来获得非常难看的方法,但我认为Python,所有那些美丽的时间操作模块,必须有一个pythonic方式来获得我需要的东西。
任何?
感谢阅读! (并希望即将到来的答案可能会启发未来其他人的道路)
答案 0 :(得分:1)
from datetime import timedelta
il = [(150, 150),
(450, 90),
(750, 150),
(1050, 90),
(1350, 150),
(1650, 90),
(1950, 150)]
sr = 12.5
tl = list(tuple((str(timedelta(seconds=j/sr)) for j in i)) for i in il)
for t in tl:
print(t)
打印:
('0:00:12', '0:00:12')
('0:00:36', '0:00:07.200000')
('0:01:00', '0:00:12')
('0:01:24', '0:00:07.200000')
('0:01:48', '0:00:12')
('0:02:12', '0:00:07.200000')
('0:02:36', '0:00:12')
[编辑:删除输出数据不匹配的评论。]
time
似乎不支持字符串格式以指定要显示的字段或小数位数。使用re.match()
去除您不想要的内容,或将秒转换为int并返回字符串以获得固定的dd.ddd
格式。