使用 pandas 将日志文件转换为 csv

Transform a log file to csv using pandas

我正在尝试转换如下所示的日志文件

      Name: AGV
   Version: 1.0.00
  Revision: 0000000000
Build date: 2000-00-00 00:00:00

Continuation of previous file

[1639992888.497] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 3410
[1639992888.497] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 4206
[1639992888.517] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 3433
[1639992888.517] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 4229
[1639992888.527] [B62FF420] [INFO    Position.cpp:438] <AGVPOS> 602, 7787.496, 

到 csv 文件。

我尝试删除不需要的前几行并手动为列添加名称,然后这样做,这个

df = pd.read_fwf('data.log')
df.to_csv('data.csv', index=None)

这适用于第一个日志文件,但不适用于其他文件,因为我为每个文件都获得了一些额外的列。

我想要得到的输出是这样的

Timestamp.       Code.      Message  
[1639992888.497] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 3410
[1639992888.497] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 4206
[1639992888.517] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 3433
[1639992888.517] [B62FF420] [DEBUG   Wings.cpp:222] Current sidewing pressure: 4229
[1639992888.527] [B62FF420] [INFO    Position.cpp:438] <AGVPOS> 602, 7787.496, 

我的方法肯定不是最有效的,有没有其他方法可以做到这一点?

谢谢。

根据您的评论,这是最好的方法(之后您必须清理数据,但它会起作用)

import pandas as pd

df = pd.read_csv('test_fwf.log', skiprows=7, sep='(?:\]\s+\[)', engine = 'python', names=['timestamp', 'code', 'message'])

说明

read_csv 可以接收到一个.log 文件,因为它仍然是一个纯文本文件,所以参数定界符可以接收一个正则表达式,我选择的分隔文件的模式是'] ['字符你每行都有所以结果应该总是有3列,参数names是你想要获得的列的名称。

skiprows 参数允许您跳过输入文件的 n 行。

注意这个正则表达式应该适用于 sep 之间有多个空格的文件,如果你确定这是一个制表符,你必须相应地更新正则表达式