在Python中使用strptime解析没有前导零的小时数

abu*_*dis 3 python time strptime

假设您有这种格式的时间:

a = [..., 800.0, 830.0, 900.0, 930.0, 1000.0, 1030.0, ...]
Run Code Online (Sandbox Code Playgroud)

问题是缺少数小时的前导零.例如00:30由下式表示30,08:00由下式表示800.,并00:00由下式表示2400.是否可以time使用strptime方法将此数据解析为对象?我尝试使用以下代码

hours = [time.strptime(str(int(i)), "%H%M") for i in a]
Run Code Online (Sandbox Code Playgroud)

但得到了

ValueError: unconverted data remains: 0
Run Code Online (Sandbox Code Playgroud)

PS我正在使用Python 2.7.

Mar*_*ers 6

用于zfill根据需要添加这些零:

hours = [time.strptime(i[:-1].zfill(4), "%H%M") for i in a]
Run Code Online (Sandbox Code Playgroud)

通过使用i[:-1]我们删除那个讨厌的尾随点,并将在左边.zfill(4)添加足够的0字符使其成为4位数.

演示:

>>> import time
>>> a = ['800.', '830.', '900.', '30.']
>>> [time.strptime(i[:-1].zfill(4), "%H%M") for i in a]
[time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1), time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1), time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1), time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)]
Run Code Online (Sandbox Code Playgroud)

如果它们是浮点值,请使用它们上的format()函数为您提供零填充值:

>>> format(800., '04.0f')
'0800'
Run Code Online (Sandbox Code Playgroud)

这样做:

hours = [time.strptime(format(i % 2400, '04.0f'), "%H%M") for i in a]
Run Code Online (Sandbox Code Playgroud)

其中% 2400标准化你的价值观在0至2399范围内.