我正在嘗試轉換一個看起來像這樣的日志檔案
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,
我的方法絕對不是最有效的,有沒有其他方法可以做到這一點?
謝謝你。
uj5u.com熱心網友回復:
根據您的評論,這是最好的方法(之后您必須清理資料,但它會起作用)
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 之間有多個空格的檔案,您必須相應地更新正則運算式
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392008.html
上一篇:使用布爾系列索引多索引
