向文本文件中的所有时间戳添加 5 秒

Add 5 seconds to all timestamps in a text file

我有一个文本文件,其中包含如下所示的信息:

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='')

我在一堆评论下面打电话给 changeTimes()

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

假设您的时间是固定格式,请使用 (\b(?:\d\d:){2}\d\d,\d\d\b) 并将您的 fileinput.FileInput 保留为 inplace=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.