python: re.sub's replace function doesn't accept extra arguments - how to avoid global variable?

Я пытаюсь увеличить все временные метки (вида '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? Заранее спасибо.

8
задан nonbeing 23 October 2011 в 19:23
поделиться