我正在寻找一种标准的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'对于第一个示例,我希望得到一个包含“timestamp”、“column_1”、“column_2”列的数据帧。
对于第二个,'timestamp','log_level','logname','message text‘
我非常确定,除了每行的末尾和每条记录的内部分隔符之外,还有一种方法可以表示每条记录的分隔符。
发布于 2018-07-06 03:16:46
我不认为熊猫有一种开箱即用的方法来实现你想要的东西。
以下是从Doc on pandas I/O methods读取数据帧的可用方法:
格式类型数据说明Reader Writer text CSV read_csv to_csv text JSON read_json to_json text HTML read_html to_html text本地剪贴板read_clipboard to_clipboard binary MS Excel read_excel to_excel binary HDF5 Format read_hdfto_hdf二进制羽化格式read_feather to_feather二进制拼图格式read_parquet to_parquet二进制消息包read_msgpack to_msgpack二进制状态read_stata to_stata二进制SAS read_sas二进制Python泡菜格式read_pickle to_pickle SQL SQL read_sql to_sql SQL Google Big Query read_gbq to_gbq
您的两个示例都没有遵循文本格式的规则: csv、html或json --它们在某种程度上是多种格式的混合。更复杂的是,元素分隔符和行分隔符都因行而异。
如果你想要一个使用正则表达式的复杂的列分隔符,那么强制pandas使用python引擎:
sep :字符串,默认‘,’
要使用的分隔符。..。此外,长度超过1个字符且不同于“\s+”的分隔符将被解释为正则表达式,并且还将强制使用Python解析引擎。注意,正则表达式分隔符很容易忽略引用的数据。正则表达式示例:'\r\t‘
而regex arg只能与C解析器一起使用,而且不能是lineterminator:
行终止符:字符串(长度1),默认无
用于将文件拆分为行的字符。仅对C解析器有效。
您可能会陷入编写自己的解析器的困境,这并不理想,因为这样的事情很容易出错。
https://stackoverflow.com/questions/51197153
复制相似问题