我有一个包含文本字符串和 json 的 .log 文件。例如:
A whole bunch of irrelevant text
2022-12-15 12:45:06, run: 1, user: james json:
[{"value": "30", "error": "8"}]
2022-12-15 12:47:36, run: 2, user: kelly json:
[{"value": "15", "error": "3"}]
More irrelevant text
我的目标是提取 json,但将其与前面的文本配对,以便将两者联系在一起。指示新部分开始的关键字是run
。但是,如下例所示,我需要从同一行中提取时间戳run
出现。表示节结束的字符是]
.
我的目标是将这段文本解析为 pandas 数据框,如下所示:
timestamp run user value error
2022-12-15 12:45:06 1 james 30 5
2022-12-15 12:47:36 2 kelly 15 8
Try:
import re
import pandas as pd
pat = re.compile(
r"(?ms)^([^,\n]+),\s*run:\s*(\S+),\s*user:\s*(.*?)\s*json:\n(.*?)$"
)
all_data = []
with open("your_file.txt", "r") as f_in:
for timestamp, run, user, json_line in pat.findall(f_in.read()):
json_line = json.loads(json_line)
all_data.append(
{
"timestamp": timestamp,
"run": run,
"user": user,
"value": json_line[0]["value"],
"error": json_line[0]["error"],
}
)
df = pd.DataFrame(all_data)
print(df)
Prints:
timestamp run user value error
0 2022-12-15 12:45:06 1 james 30 5
1 2022-12-15 12:47:36 2 kelly 15 8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)