我有一些不可预测的日志行,我试图分裂。
我可以预测的一件事是,第一个字段始终以.
或:
结尾。
有没有什么方法可以在任何分隔符出现时自动拆分字符串?
答案 0 :(得分:1)
检查两个字符的索引,然后使用最低索引分割字符串。
答案 1 :(得分:1)
使用.
函数查看字符串中:
和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']