Я пытаюсь увеличить все временные метки (вида 'HH:MM:SS') в текстовом файле на количество секунд, заданное параметром командной строки моей программы.
Вот упрощенная версия моих усилий на данный момент:
import re
from datetime import datetime, timedelta
time_diff = timedelta(seconds=10)
def replace_time(matchobj):
if matchobj.group(1) not in [None, '']:
return (datetime.strptime(matchobj.group(1), "%H:%M:%S") + time_diff).strftime("%H:%M:%S")
print re.sub('(\d\d:\d\d:\d\d)', replace_time, "01:27:55")
Это работает отлично: результат выполнения этой команды - 01:28:05
, что как раз то, что мне нужно.
Однако я слышал, что мне следует как можно реже использовать глобальные переменные. Поэтому мне интересно, есть ли простой способ передать time_diff
в качестве аргумента в replace_time
вместо использования глобальной переменной.
Я попробовал очевидное, но это не удалось:
def replace_time(matchobj, time_diff):
if matchobj.group(1) not in [None, '']:
return (datetime.strptime(matchobj.group(1), "%H:%M:%S") + time_diff).strftime("%H:%M:%S")
time_diff = timedelta(seconds=10)
print re.sub('(\d\d:\d\d:\d\d)', replace_time(matchobj, time_diff), "01:27:55")
с этой ошибкой: NameError: name 'matchobj' is not defined
, поэтому я не могу передать matchobj напрямую.
Я просмотрел страницу standard re и standard re howto, но не могу найти там нужную мне информацию. Как я могу избежать использования глобальной переменной? Можно ли как-то передать дополнительный аргумент в функцию replace_time
? Заранее спасибо.