向文本文件中的所有时间戳添加 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.
我有一个文本文件,其中包含如下所示的信息:
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.