У меня есть скрипт, который анализирует некоторые журналы, и он имеет функцию, которая принимает строку и возвращает объект datetime, он обычно работает либо со строкой пользовательского ввода, которую пользователь ввел в CLI, либо с отметкой времени из записи в файле журнала (деформацияcase):
def str2datetime(string, warp=False):
"""
takes a string and returns a time object format. Used by common_functions.range2datetime
"""
if warp:
return datetime.datetime.strptime(string, '%Y-%m-%dT%H:%M:%S')
current_year = str(datetime.datetime.now().year)
tuple_of_formats = ('%Y-%m-%dT%H:%M:%S', '%Y-%m-%dT%H:%M', '%Y-%m-%dT%H', '%Y-%m-%dT',
'%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%d %H', '%Y-%m-%d',
'%Y %m %d %H:%M:%S', '%Y %m %d %H:%M', '%Y %m %d %H', '%Y %m %d',
'%Y-%b-%d %H:%M:%S', '%Y-%b-%d %H:%M', '%Y-%b-%d %H', '%Y-%b-%d',
'%Y %b %d %H:%M:%S', '%Y %b %d %H:%M', '%Y %b %d %H', '%Y %b %d')
# user can input the time in different formats and even without a year, if this is a case year = current year
for string in (current_year + ' ' + string, string):
for tuple_of_format in tuple_of_formats:
try:
return datetime.datetime.strptime(string, tuple_of_format)
except ValueError:
pass
регистр деформации работал очень хорошо для обычных журналов, которые имеют временную метку в формате ISO, такую как «2019-01-01T14: 20: 07», но недавно наш разработчик. команды изменили формат метки времени в журнале, и теперь он выглядит так: «19-01-01 14: 36: 37.703». Теперь мне нужно изменить строку, переданную в функцию, с [0:19] (она удовлетворяет формату деформации) на [0:17], а также изменить формат на «% y-% m-% d% H:%M:% S '.
Я мог бы попытаться использовать тот же метод, который я использовал для строк ввода пользователя, но это может повлиять на производительность скрипта (он обрабатывает сотни мегабайт журналов и даже несколько дополнительных форматов при попытке)/ кроме добавляет задержку обработки). Можно ли это как-то улучшить, чтобы сначала определить, какой формат используется, затем придерживаться его, и если в какой-то момент есть много записей журнала, которые используют другой формат, затем переключиться на этот формат и снова придерживаться его?
Благодарю.