[英]Python convert string to datetime but formatting is not very predictable
我正在使用 Subprocess 和ps
提取 Linux 进程的执行时间。 我想把它放在日期时间 object 中,以执行日期时间算术。 但是,我有点担心执行时间的 output ps
返回值:
1-01:12:23 // 1 day, 1 hour, 12 minutes, 23 seconds
05:39:03 // 5 hours, 39 minutes, 3 seconds
15:06 // 15 minutes, 6 seconds
请注意,当天之前没有零填充。 而且它不包括月/年,而从技术上讲,某些东西可以运行那么长时间。
因此,我不确定将其转换为timedelta
的格式字符串,因为如果一个进程运行了几个月,或者另一个进程只运行了几个小时,我不希望它中断。
更新
Mozway给出了一个非常聪明的答案。 但是,我退后一步,想知道是否可以通过其他方式获得执行时间。 我目前正在使用ps
来获取时间,但这意味着我也有 pid。 我还能用 pid 做些什么,以更简单的格式获取执行时间吗?
(只能使用官方Python库)
更新2
它实际上是小时、分钟和秒之间的冒号。
你应该使用timedelta
以下是有关如何从字符串转换的建议:
import datetime
s = '1-01-12-23'
out = datetime.timedelta(**dict(zip(['days', 'hours', 'minutes', 'seconds'],
map(int, s.split('-')))))
Output:
datetime.timedelta(days=1, seconds=4343)
如果您可以有更多或更少的单位,并假设存在最小的单位,您可以利用zip
以最小的可迭代停止的事实,只需反转输入:
s = '12-23'
units = ['days', 'hours', 'minutes', 'seconds']
out = datetime.timedelta(**dict(zip(reversed(units),
map(int, reversed(s.split('-'))))))
Output:
datetime.timedelta(seconds=743)
使用re.split
处理1-01:23:45
格式
import re
def to_timedelta(s):
units = ['days', 'hours', 'minutes', 'seconds']
return datetime.timedelta(**dict(zip(reversed(units),
map(int, reversed(re.split('[-:]', s))))))
to_timedelta('1-01:12:23')
# datetime.timedelta(days=1, seconds=4343)
to_timedelta('05:39:03')
# datetime.timedelta(seconds=20343)
to_timedelta('15:06')
# datetime.timedelta(seconds=906)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.