亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 .txt 字典轉換為數據框并跳過一些值

將 .txt 字典轉換為數據框并跳過一些值

桃花長相依 2024-01-27 14:42:44
我有一個(大部分)字典格式的 .txt 性能日志,如下所示:10:07:49.1396 信息 {"message":"殺死進程...","level":"信息","logType":"用戶","timeStamp":"2020-10-19T10:07:49.1386035+ 02:00"}10:07:49.4102 信息 {"message":"打開應用程序...","level":"信息","logType":"用戶","timeStamp":"2020-10-19T10:07:49.4092373+ 02:00"}我想將其放入這樣的數據框中:message                  level          logType   timeStampKilling processes...     Information    User      2020-10-19T10:07:49.1386035+02:00Opening applications...  Information    User      2020-10-19T10:07:49.4092373+02:00所以基本上只有大括號內的內容。我不需要日志條目開頭的“10:07:49.1396 Info”。我現在正在學習 NumPy 和 Pandas,但作為一個絕對的初學者,我什至不確定僅使用這兩個庫是否可行。我還需要使用其他東西嗎?
查看完整描述

2 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

您必須手動解析日志以收集相關數據:


import re, json


pattern = re.compile(r'.+? .+? (.+)')

logs = []

with open('data.txt') as fp:

? ? for line in fp:

? ? ? ? match = pattern.match(line)

? ? ? ? if match:

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? data = json.loads(match.group(1))

? ? ? ? ? ? ? ? logs.append(data)

? ? ? ? ? ? except json.JSONDecodeError:

? ? ? ? ? ? ? ? pass


df = pd.DataFrame(logs)

要實時執行此操作,您必須監視文件的更改。


查看完整回答
反對 回復 2024-01-27
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

這是另一種使用方法json_normalize:


import json

import re


pattern = re.compile('{.*}')

rows = []

with open('a.txt', 'r+') as f:

    for line in f:

        for match in re.finditer(pattern, line):

            data = json.loads(match.group())

            dfx = pd.json_normalize(data)

            rows.append(dfx)


df = pd.concat(rows)

print(df)


                   message        level logType                          timeStamp

0     Killing processes...  Information    User  2020-10-19T10:07:49.1386035+02:00

0  Opening applications...  Information    User  2020-10-19T10:07:49.4092373+02:00


查看完整回答
反對 回復 2024-01-27
  • 2 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號