【问题标题】:Add 5 seconds to all timestamps in a text file为文本文件中的所有时间戳添加 5 秒
【发布时间】:2019-11-25 18:35:28
【问题描述】:

我有一个包含如下信息的文本文件:

341
00:33:17,72 --> 00:33:24,05
this happen because si se puede
yes we can. Thank you very much.

我正在尝试查找所有时间实例并将时间增加五秒。这是我目前所拥有的:

import re
import string
from datetime import datetime, timedelta
import fileinput



fr = open('project.txt')
text = fr.read()
fr.close()
regex = r"(\d+):(\d+):(\d+),(\d+)"
matches = re.finditer(regex, text, re.MULTILINE)

def changeTimes():
    for matchNum, match in enumerate(matches, start=1):

        print("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum=matchNum, start=match.start(),
                                                                            end=match.end(), match=match.group()))
        t1 = datetime.strptime(match.group(), "%H:%M:%S,%f")  # put your time instead
        delta = timedelta(seconds=5)  # seconds, minutes, hours, whatever
        t1 += delta
        print(t1.strftime("%H:%M:%S,%f")[:-4])
        with fileinput.FileInput('project.txt', inplace=True, backup='.bak') as file:
            for line in file:
                print(line.replace(r"(\d+):(\d+):(\d+),(\d+)", t1.strftime("%H:%M:%S,%f")[:-4]), end='')

我在一堆 cmets 下给 changeTimes() 打电话。

我没有收到任何错误,也没有更改文本文件。这是为什么呢?

【问题讨论】:

  • 你永远不会打电话给changeTimes()。此外,您可能希望在 text 变量中进行所有替换,然后将修改后的 text 写回文件。
  • 我没有看到任何错误,但运行时文本文件也没有任何变化。为什么会这样?
  • 这是从文本文件中直接复制/粘贴。现在看起来是这样的。所以我希望它是 :22 --> :29 (+5 秒)

标签: python regex file python-datetime


【解决方案1】:

假设您的时间是固定格式,请使用(\b(?:\d\d:){2}\d\d,\d\d\b) 并将fileinput.FileInputinplace=True 保持一致(无需在单独的文件读取上进行模式匹配——您可以在一个循环中完成所有操作)。为re.sub 提供一个 lambda 函数,用于解析、递增和重新格式化每行匹配的时间字符串。

import fileinput
import re
from datetime import datetime, timedelta

def add_seconds(x, fmt="%H:%M:%S,%f", seconds=5):
    return (datetime.strptime(x, fmt) +
            timedelta(seconds=seconds)).strftime(fmt)

pattern = r"(\b(?:\d\d:){2}\d\d,\d\d\b)"
replacement = lambda x: add_seconds(x.group(0))[:11]

with fileinput.FileInput("project.txt", inplace=True, backup=".bak") as f:
    for line in f:
        print(re.sub(pattern, replacement, line), end="")

输出:

341
00:33:22,72 --> 00:33:29,05
this happen because si se puede
yes we can. Thank you very much.

【讨论】:

  • 完美运行!谢谢一百万,我真的把头撞在墙上太久了。
  • 没问题——你几乎把所有的部分都放在了一起,只是稍微重新安排一下而已。
猜你喜欢
  • 2020-05-07
  • 1970-01-01
  • 2021-12-10
  • 2018-09-19
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多