You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含天数的时间字符串转小时格式?Python/UNIX工具实现

解决方案:将CSV中的“X days HH:MM:SS.ff”格式转换为总小时数格式

问题说明

原CSV中的时间字段采用“X days HH:MM:SS.ff”格式,datetime.strptime()无法直接匹配“X days”部分(无对应格式化指令),需要手动拆分计算:将天数转换为小时后与原小时数相加,得到总小时数:MM:SS.ff的格式。


Python 实现

通过字符串拆分提取天数和时间片段,计算总小时数后重新拼接:

import csv

def convert_time(time_str):
    # 拆分天数与时间部分
    days_part, time_segment = time_str.strip().split(' days ')
    total_hours = int(days_part) * 24
    # 拆分小时与剩余时分秒
    hour, rest = time_segment.split(':', 1)
    total_hours += int(hour)
    return f"{total_hours}:{rest}"

# 处理本地CSV文件(替换为你的输入输出路径)
with open('input.csv', 'r') as in_file, open('output.csv', 'w', newline='') as out_file:
    reader = csv.reader(in_file, delimiter=',')
    writer = csv.writer(out_file, delimiter=',')
    for row in reader:
        # 转换第3、4列的时间字段(索引从0开始)
        row[2] = convert_time(row[2])
        row[3] = convert_time(row[3])
        writer.writerow(row)

如果需要从标准输入读取、输出到标准输出,可修改为:

import csv
import sys

def convert_time(time_str):
    days_part, time_segment = time_str.strip().split(' days ')
    total_hours = int(days_part) * 24
    hour, rest = time_segment.split(':', 1)
    total_hours += int(hour)
    return f"{total_hours}:{rest}"

reader = csv.reader(sys.stdin, delimiter=',')
writer = csv.writer(sys.stdout, delimiter=',')
for row in reader:
    row[2] = convert_time(row[2])
    row[3] = convert_time(row[3])
    writer.writerow(row)

使用方式:python convert.py < input.csv > output.csv


UNIX 工具(Awk)实现

利用Awk的字符串拆分功能快速处理文本:

脚本文件方式

创建convert_time.awk:

BEGIN {
    FS = ", *"  # 匹配逗号后任意数量的空格作为分隔符
    OFS = ", "  # 输出时用逗号加空格分隔字段
}

{
    # 处理第3个字段
    split($3, parts, " days ")
    split(parts[2], time_parts, ":")
    total_hour = parts[1] * 24 + time_parts[1]
    $3 = total_hour ":" time_parts[2] ":" time_parts[3]
    
    # 处理第4个字段
    split($4, parts, " days ")
    split(parts[2], time_parts, ":")
    total_hour = parts[1] * 24 + time_parts[1]
    $4 = total_hour ":" time_parts[2] ":" time_parts[3]
    
    print $0
}

使用方式:awk -f convert_time.awk input.csv > output.csv

单行命令方式

awk 'BEGIN{FS=", *"; OFS=", "}{split($3,p," days "); split(p[2],t,":"); $3=p[1]*24+t[1]":"t[2]":"t[3]; split($4,p," days "); split(p[2],t,":"); $4=p[1]*24+t[1]":"t[2]":"t[3]; print $0}' input.csv > output.csv

内容的提问来源于stack exchange,提问作者Bashnoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:05:23