通过首先划分的分隔符拆分Python

时间:2015-02-17 19:40:49

标签: string python-2.7 parsing logfile

我有一些不可预测的日志行,我试图分裂。

我可以预测的一件事是,第一个字段始终以.:结尾。

有没有什么方法可以在任何分隔符出现时自动拆分字符串?

2 个答案:

答案 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']