You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中从含特定结构数据的文件提取指定信息

用Python提取MongoDB风格JSON数据的特定字段

嘿,我来帮你搞定用Python从这份数据里提取特定内容!这份数据是MongoDB导出的BSON转JSON格式,里面有一些特殊标记(比如$oid、$date),不过处理起来并不难,咱们一步步来:

步骤1:加载数据

首先得把数据转换成Python能处理的字典结构:

  • 如果数据是直接写在代码里的,直接赋值就行:
sample = { 
    "_id" : { "$oid" : "57d3a7f6f1a4758c497b23eb" }, 
    "location" : "/contact-us.html", 
    "host" : "www.fullestop.com", 
    "h" : "1243", 
    "url" : "https://www.fullestop.com/contact-us.html", 
    "ip" : "146.196.34.138", 
    "beta_user" : 0, 
    "referrer" : "https://www.fullestop.com/india/web-design-expert/index.php", 
    "country" : [ "India" ], 
    "browser" : "Chrome", 
    "os" : "Unknown OS Platform", 
    "created_date" : { "$date" : 1473445800000 }, 
    "user_cookie" : "199CB2382B29EC5C325..." 
}
  • 如果数据存在JSON文件里,用json模块读取:
import json

with open('your_data_file.json', 'r') as f:
    data = json.load(f)
    # 如果文件里是单个文档,data就是上面的sample字典;如果是多个文档,data是列表

步骤2:提取普通字段

对于像location、host、browser这类直接的键值对,直接通过字典键访问就行:

# 提取页面路径
page_location = sample['location']
print(page_location)  # 输出: /contact-us.html

# 提取浏览器信息
browser = sample['browser']
print(browser)  # 输出: Chrome

# 提取国家(注意country是数组,取第一个元素)
country = sample['country'][0]
print(country)  # 输出: India

步骤3:处理特殊类型字段

这份数据里有$oid(MongoDB的ObjectId)和$date(毫秒级时间戳),咱们可以把它们转换成更易用的格式:

from datetime import datetime

# 提取ObjectId
object_id = sample['_id']['$oid']
print(object_id)  # 输出: 57d3a7f6f1a4758c497b23eb

# 把时间戳转成可读的日期时间格式(注意$date是毫秒,要除以1000转成秒)
created_datetime = datetime.fromtimestamp(sample['created_date']['$date'] / 1000)
print(created_datetime)  # 输出类似: 2016-09-09 12:30:00(根据时区不同可能有差异)

步骤4:批量提取多个字段

如果需要把多个感兴趣的字段整理成新的字典或者列表,比如只保留url、ip、created_datetime:

extracted_data = {
    'url': sample['url'],
    'ip_address': sample['ip'],
    'visit_time': datetime.fromtimestamp(sample['created_date']['$date'] / 1000)
}

print(extracted_data)
# 输出: {'url': 'https://www.fullestop.com/contact-us.html', 'ip_address': '146.196.34.138', 'visit_time': datetime.datetime(2016, 9, 9, 12, 30)}

如果你的文件里有多个这样的文档(比如是一个JSON数组),只需要循环遍历处理:

# 假设data是从文件读取的文档列表
extracted_list = []
for doc in data:
    item = {
        'host': doc['host'],
        'browser': doc['browser'],
        'country': doc['country'][0]
    }
    extracted_list.append(item)

# 现在extracted_list就是所有文档提取后的结果

内容的提问来源于stack exchange,提问作者Lily Bhasin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:27:46