【问题标题】:Subtract two times within the same list to find duration在同一个列表中减去两次以找到持续时间
【发布时间】:2023-03-23 19:00:02
【问题描述】:

我正在编写一个脚本,该脚本读取一个日志文件并输出所有包含“Send”的日志以及相关的开始和结束时间。我的脚本输出的日志如下所示:

['Send', '2020-02-02T08:35:12.242Z', '2020-02-02T08:45:10.355Z']
['Send', '2020-02-02T08:52:23.692Z', '2020-02-02T08:58:43.118Z']

我正在尝试做两件事。我正在尝试提取时间戳以获取差异并以常规 H:M:S 格式获取每个“发送”的持续时间。我试过查看datetime 文档和strftime 来转换时间值,但我不知道如何从输出列表中获取两次。

然后我尝试导出格式如下的 csv 文件:

Status, Start, End, Duration
Send, 2020-02-02T08:35:12.242Z, 2020-02-02T08:45:10.355Z, 09:58.113
Send, 2020-02-02T08:52:23.692Z, 2020-02-02T08:58:43.118Z, 06:19.426

谢谢大家的帮助!

【问题讨论】:

  • 你在使用pandas吗?
  • @Chris 我不是,我对编码很陌生。我假设我可以通过使用 pandas 来实现这一点?
  • 我会推荐使用它;虽然这不是唯一的方法。
  • 如果你使用Python 2.7作为标签,你应该升级到Python 3,因为2不再支持。
  • 您能否更具体地说明问题所在? I can't figure out how to get the two times out of the outputed lists 到底是什么意思?

标签: python csv datetime


【解决方案1】:

您可以使用datetime 模块将时间转换为使用strptime() 的日期时间,然后获取这些日期时间之间的差异。完成后,您可以使用csv.writer() 将结果写入输出文件。

演示:

from datetime import datetime
from csv import writer

data = [
    ["Send", "2020-02-02T08:35:12.242Z", "2020-02-02T08:45:10.355Z"],
    ["Send", "2020-02-02T08:52:23.692Z", "2020-02-02T08:58:43.118Z"],
]

with open("result.csv", mode="w", newline='') as csv_out:
    csv_writer = writer(csv_out)
    csv_writer.writerow(["Status", "Start", "End", "Duration"])

    for send, t1, t2 in data:
        d1 = datetime.strptime(t1, "%Y-%m-%dT%H:%M:%S.%fZ")
        d2 = datetime.strptime(t2, "%Y-%m-%dT%H:%M:%S.%fZ")
        csv_writer.writerow([send, t1, t2, d2 - d1])

result.csv

Status,Start,End,Duration
Send,2020-02-02T08:35:12.242Z,2020-02-02T08:45:10.355Z,0:09:58.113000
Send,2020-02-02T08:52:23.692Z,2020-02-02T08:58:43.118Z,0:06:19.426000

注意:这显然与您想要的结果不符,但剩下的留给您自己弄清楚:)

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2021-10-18
    • 2016-02-24
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多