Python 熊猫:跨越多行的加载记录

Python 熊猫:跨越多行的加载记录,python,pandas,logging,Python,Pandas,Logging,我正在寻找标准的pythonic方法,将日志文件中的两种常见模式加载到pandas数据帧中 跨多行的记录: =REPORT==== 26-Jun-2018::18:30:00 === column_1: some data column_2: {'maybe': 'json or something'} =REPORT==== 26-Jun-2018::19:30:00 === column_1: some data column_2: {'maybe': 'j

我正在寻找标准的pythonic方法,将日志文件中的两种常见模式加载到pandas数据帧中

跨多行的记录:

=REPORT==== 26-Jun-2018::18:30:00 ===
    column_1: some data
    column_2: {'maybe': 'json or something'}

=REPORT==== 26-Jun-2018::19:30:00 ===
    column_1: some data
    column_2: {'maybe': 'json or something',
               'and': 'maybe spanning multiple lines'}
2018-01-09 20:12:38,020 INFO logname: Examining 6668121 database
2018-01-09 20:13:00,020 ERROR logname: Caught an Exception
    Traceback (most recent call last):
    File "test.py", line 1, in __main__
        None.do_the_thing()
    AttributeError: 'NoneType' object has no attribute 'getDatabase'
可能跨越多行的记录:

=REPORT==== 26-Jun-2018::18:30:00 ===
    column_1: some data
    column_2: {'maybe': 'json or something'}

=REPORT==== 26-Jun-2018::19:30:00 ===
    column_1: some data
    column_2: {'maybe': 'json or something',
               'and': 'maybe spanning multiple lines'}
2018-01-09 20:12:38,020 INFO logname: Examining 6668121 database
2018-01-09 20:13:00,020 ERROR logname: Caught an Exception
    Traceback (most recent call last):
    File "test.py", line 1, in __main__
        None.do_the_thing()
    AttributeError: 'NoneType' object has no attribute 'getDatabase'
对于第一个示例,我希望得到一个数据帧,其中包含['timestamp','column_1','column_2']

对于第二个,['timestamp','log_level','logname','messagetext']


我确信有一种方法可以表示每条记录的分隔符,而不仅仅是每行的结尾,以及每条记录的内部分隔符。

我认为pandas没有现成的方法来实现您想要的功能

以下是从中读取数据帧的可用方法:

您的两个示例都不遵循文本格式的规则:csv、html或json——它们有点不匹配多种格式。更复杂的是,元素分隔符和行分隔符在每行中都有所不同

从:

如果需要使用正则表达式的复杂列分隔符,则这将强制pandas使用python引擎:

sep:str,默认','

要使用的分隔符。[…]此外,分离器的长度超过 与“\s+”不同的1个字符将被解释为常规字符 表达式,还将强制使用Python解析引擎。 请注意,正则表达式分隔符容易忽略带引号的数据。正则表达式 示例:'\r\t'

然而,
lineterminator
arg只能与C解析器一起使用,而且不能是正则表达式:

线条终止符:str(长度1),默认为无

字符将文件拆分为行。仅对C解析器有效

您可能无法编写自己的解析器,这并不理想,因为这样的事情很容易出错