我想要一个包含Feet + Frames值的文本文档,并将它们转换为Timecodes。例如,0000 + 00被00:00:00:00替换。
我有一个功能来完成从英尺+帧到时间码的转换(每英尺16帧,帧速率为每秒24帧):
def FeetFramesToTimecode(FeetFrames):
frames = int(FeetFrames[:4])*16+int(FeetFrames[-2:])
return "%02d:%02d:%02d:%02d" % (frames/(3600*framerate), frames/(60*framerate)%60, frames/framerate%60, frames%framerate)
然后我有代码通过文本文件和子脚的脚+帧与时间码:
for line in input_document:
found = re.search(r'\d{4}\+\d{2}', line)
if found:
print "%s replaces %s" % (FeetFramesToTimecode(found.group()), found.group())
new_line = re.sub(r'\d{4}\+\d{2}', (FeetFramesToTimecode(found.group()), line)
output_document.write(new_line)
else:
output_document.write(line)
那么,我做错了什么?如何在re.sub?
中使用函数答案 0 :(得分:1)
resub
可以使用可调用的第二个参数而不仅仅是替换字符串。
如果传递可调用对象,则必须使用匹配对象。
您还应该遵循python pep8以使python更具可读性(对于其他pythonistas)
类似的东西:
def feetframes_to_timecode(feetframes_match, framerate=24):
feetframes = feetframes_match.group()
frames = int(feetframes[:4])*16+int(feetframes[-2:])
return "%02d:%02d:%02d:%02d" % (frames/(3600*framerate),
frames/(60*framerate)%60,
frames/framerate%60,
frames%framerate)
# then just use:
for line in input_document:
output_document.write(re.sub(r'\d{4}\+\d\d', feetframes_to_timecode, line))
答案 1 :(得分:0)
您的示例代码有一个额外的'('不属于。这就是该行应该是:
new_line = re.sub(r'\d{4}\+\d{2}', FeetFramesToTimecode(found.group()), line)
这就像你想要的那样为我产生了输出。