在Python中如何将时间数组拆分为小时、分钟、秒?

2024-09-30 16:39:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码,可以读取141个文件,这些文件的名字后面有一个时间。例如,文件名如下所示:

400km_t150317_054000
400km_t150317_054100
400km_t150317_054200

下面是读取141个文件的代码,并将文件名分离,以将时间提取为小时、分钟、秒

filenames = [pathlib.Path(f).stem for f in os.listdir('Path')]

time_array = []
for f in filenames:
    parts = f.split('_')
    time_string = parts[-1]
    time_obj = time.strptime(time_string, '%H%M%S')
    time_array.append(time_obj)

作为参考,time_数组输出的前几行如下所示:

time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=5, tm_min=40, 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=5, tm_min=41, 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=5, tm_min=42, 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=5, tm_min=43, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)

有141个输出与上述输出类似。我要做的是从141个输出中提取小时、分钟和秒,并创建一个数组,第一个输出只有小时、分钟、秒,然后是下一个输出,依此类推。我想要这个,因为我想得到十进制小时形式的时间,所以小时+(分钟/60)+(秒/3600)。稍后我将在for循环中使用十进制小时数组

我知道下面的代码可以正确地从一个输出中提取小时、分钟、秒,但我不知道如何为所有141个输出编写这样的代码。下面我将展示它在上面的第一个输出中是如何工作的

t = time_array[0]
hour = t.tm_hour
minute = t.tm_min
second = t.tm_sec
print(hour, minute, second)
5 40 0

Tags: 文件代码timesecminyearstructtm
3条回答

您可以使用tuple创建一个仅包含小时、分钟、秒的数组

arr = [(t.tm_hour, t.tm_min, t.tm_sec) for t in time_array]

多功能一体解决方案,具体取决于您希望如何继续:

from datetime import datetime

names = [
    '400km_t150317_054000',
    '400km_t150317_054100',
    '400km_t150317_054200'
] # replace with actual filenames

for name in names:
    # ignore prefix, just keep time-suffix
    _, time_str = name.split('_t')
    # extract just time - not datetime
    time = datetime.strptime(time_str, '%H%M%S_%f').time()

    # if you need the time-object
    print(time)
    # to extract fields
    print(time.hour, time.minute, time.second)
    # representation as hour-decimals
    print(time.hour + time.minute/60 + time.second/3_600)

输出:

15:03:17.054000
15 3 17
15.054722222222223
15:03:17.054100
15 3 17
15.054722222222223
15:03:17.054200
15 3 17
15.054722222222223

time_array_hms = [(t.tm_hour, t.tm_min, t.tm_sec) for t in time_array]

我们应该做到这一点

相关问题 更多 >