🐸

日志碎片

数据与文本工具python-data-tinkerer-30-the-log-fragments
奖励: 155 XP
|

日志碎片

Hoppy 在守望台脚边捡到一张折皱的值守日志。它不是整齐表格,也不是漂亮 JSON,只是一行一行留下的短记录片段。

这就更像真实世界会遇到的文本:不完美,但也不是完全没规律。只要先把每一行拆开,再把一行里的小片段拆开,就已经能拿到很有用的信息。

日志样文本常常是“短行 + 重复字段”

轻量日志文本往往不是要你一次理解所有东西,而是先找到它每一行重复的形状。比如一行里都可能包含时间、人物、动作,只是它们被写成了短片段。

sample_line = "step=bell | keeper=Pip | room=moss-shelf"
parts = sample_line.split(" | ")
step_name = parts[0].split("=")[1]
keeper_name = parts[1].split("=")[1]
print(step_name)
print(keeper_name)

这个示例只是演示“先按片段切开,再按等号拿值”的动作,不是今天 starter 的原题。真正的任务里,你会从一份日志样文本文件中提取几项重点信息。

今天的任务:从日志碎片里做一份小汇总

starter 已经帮你读好了 watch_log.txt,并先拆成了 log_lines。你要从这些日志样行里拿出 log_count、第一条记录的时间、第一条记录的守望者,以及最后一条记录的动作,再把它们整理进 log_summary

1
先把整份日志看成多行文本

运行 starter,先确认 log_text 已经从文件里读出来了,再看 log_lines 是怎样把整份文本拆成一行一行的。

2
从第一条记录里拿出两个重点字段

第一行里已经重复出现 stamp=...keeper=...action=... 这种片段。先把这行按 " | " 切开,再从前两个片段里拿到 first_stampfirst_keeper

3
再从最后一条记录里拿一个动作

用同样的方法处理最后一行,拿到 last_action。这一步是在练“同一种文本形状,可以反复用同一种拆法”。

4
把结果收成 log_summary

最后用 log_countfirst_stampfirst_keeperlast_action 构造一个字典 log_summary

保持任务轻量真实

这节课只是第一次碰日志样文本。我们不会进入真正日志系统,也不会做复杂时间解析或错误恢复。重点只是:面对更真实一点的文本,先把它拆成片段,再提取几项重点。

参考答案
点击展开
参考答案:
with open("watch_log.txt", "r", encoding="utf-8") as file:
  log_text = file.read().strip()

print("Log text:")
print(log_text)

log_lines = log_text.splitlines()
print("Log lines:", log_lines)

log_count = len(log_lines)
first_stamp = log_lines[0].split(" | ")[0].split("=")[1]
first_keeper = log_lines[0].split(" | ")[1].split("=")[1]
last_action = log_lines[2].split(" | ")[2].split("=")[1]

log_summary = {
  "log_count": log_count,
  "first_stamp": first_stamp,
  "first_keeper": first_keeper,
  "last_action": last_action,
}

print("Log count:", log_count)
print("First stamp:", first_stamp)
print("First keeper:", first_keeper)
print("Last action:", last_action)
print("Log summary:", log_summary)
高级技巧
想更进一步?点击展开

到这里,你已经从“先看模式”迈进了一步:现在你不只是在一条短线索里看规律,而是在更像真实世界的多行文本里,按行、按片段提取重点。

下一课会继续沿着这条线走,让你学会从混合文本里揪出更明确的标签和信号。

Loading...
终端输出
Terminal
Ready to run...