Посмотрите на индекс символов .
и :
в строке, используя функцию index()
.
Вот простая реализация:
def index_default(line, char):
"""Returns the index of a character in a line, or the length of the string
if the character does not appear.
"""
try:
retval = line.index(char)
except ValueError:
retval = len(line)
return retval
def split_log_line(line):
"""Splits a line at either a period or a colon, depending on which appears
first in the line.
"""
if index_default(line, ".") < index_default(line, ":"):
return line.split(".")
else:
return line.split(":")
Я завернул функцию index()
в index_default()
функции, потому что, если строка не содержит символ, index()
бросает ValueError, и я не был уверен, что если каждая строка в вашем журнале будет содержать как период, так и двоеточие.
А затем вот быстрый пример:
mylines = [
"line1.split at the dot",
"line2:split at the colon",
"line3:a colon preceded. by a dot",
"line4-neither a colon nor a dot"
]
for line in mylines:
print split_log_line(line)
который возвращает
['line1', 'split at the dot']
['line2', 'split at the colon']
['line3', 'a colon preceded. by a dot']
['line4-neither a colon nor a dot']
случайный вопрос: они используют. или: для чего-либо другого, кроме разделителей полей ... если бы вы не могли сделать line.replace ('.', ": '). split (": ") – Foon
остальное поле совершенно непредсказуемо, я получаю все – mdandr
достаточно справедливо ... Я просто подумал, что я предлагаю возможный один вкладыш, ответы ниже, очевидно, более сложны, но немного более надежны перед лицом менее предсказуемых данных. – Foon