如何提取JSON事件中时间戳并格式化后与事件内容写入文件?
问题:从JSON事件列表中提取并格式化时间与内容写入文件
需要从包含字符串和字典的列表对象中提取特定值,当事件为"user"或"bot"时,将格式化后的时间、事件类型和文本内容写入输出文件。
输入JSON结构示例
{ "event": "user", "timestamp": { "$numberDouble": "1671459681.4369426" }, "metadata": { "model_id": "125817626" }, "text": "hello", "parse_data": { "intent": { "name": "greet", "confidence": { "$numberDouble": "1.0" } } } }
期望输出格式
2020-03-13 12:11:25 user: hello
2020-03-13 12:11:28 bot: Hi
当前已实现代码
import json from datetime import datetime f = open('1234.json') data = json.load(f) all_events = [e for e in data.get('events', list()) if e.get('event')=='user' or e.get('event')=='bot'] file_object = open('1234.txt', 'a') for event in all_events: file_object.write(str(event.get('timestamp'))+ " "+ event.get('event')+ ": " + event.get('text', '')+ "\n") f.close()
当前输出问题
{'$numberDouble': '1671459681.4369426'} user: hello
已知可以用以下代码格式化时间,但不知道如何整合到写入语句中:
ts = int("1584101485") print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
解决方案
只需先从timestamp字典中提取出时间戳值,转换格式后再拼接写入即可,修改后的完整代码如下:
import json from datetime import datetime # 用with语句自动管理文件,避免手动关闭的疏漏 with open('1234.json', 'r') as f: data = json.load(f) all_events = [e for e in data.get('events', []) if e.get('event') in ('user', 'bot')] with open('1234.txt', 'a') as file_object: for event in all_events: # 提取并转换时间戳 timestamp_dict = event.get('timestamp', {}) ts_str = timestamp_dict.get('$numberDouble', '0') ts = float(ts_str) # 格式化时间字符串 formatted_time = datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') # 获取事件类型和文本内容 event_type = event.get('event', '') text = event.get('text', '') # 拼接成目标格式并写入 line = f"{formatted_time} {event_type}: {text}\n" file_object.write(line)
关键说明
- 用
with语句处理文件,无需手动调用close(),代码更简洁安全 - 时间戳原数据是带小数的字符串,转换为浮点数后可直接传入
utcfromtimestamp,会自动处理毫秒部分 - 使用f-string拼接字符串,比
+连接更清晰易读 - 用
event.get('event') in ('user', 'bot')简化条件判断逻辑
内容的提问来源于stack exchange,提问作者Bananachip
相关产品推荐
相关产品推荐

