处理推文时使用 JSON 或正则表达式

Amr*_*hna 3 python regex json python-2.6

哪种方法更快,使用 JSON 解析器(python 2.6)或正则表达式来获取相关数据。由于数据量巨大,我认为使用一种方法与其他方法相比在时间上会有很大差异。

Mat*_*ian 5

假设你在问什么...

我相信您会问,通过反序列化序列化 JSON 字符串或通过正则表达式搜索相关匹配项来从序列化 JSON 字符串获取信息是否更快。

快速回答

根据我在序列化 JSON 中的活动流对象(推文、转发或引用)中查找单个键值对的非官方经验,使用正则表达式比解析整个 JSON 对象更好

为什么?

这是因为推文非常大,当您处理数十万条推文时,反序列化整个JSON字符串并随机访问单个键值对的结果 JSON 对象就像使用大锤敲开坚果一样。

潜在的剧情漏洞...

然而,当键在不同的嵌套级别重复时,就会出现问题。

例如,报价有一个名为 的根级别属性twitter_quoted_status,其中包含此报价对象引用的推文的副本。

这意味着如果您使用正则表达式搜索序列化的引用对象,则推文和引用共享的任何属性名称都将返回至少 2 个匹配项。

由于您不能也不应该依赖 JSON 对象中属性顺序的可靠性(字典键应该是无序的!),您甚至不能依赖您想要的第一个或第二个(或其他)匹配如果您到目前为止已经识别出该模式,则匹配。

目前我可以与您分享的唯一证据是,要从 100,000 个原始推文对象(没有引用或转发)中检索单个键值对,我的桌面在使用反序列化方法时往往需要 8-14 秒,并且使用正则表达式时为 0-2。

免责声明

数字是近似值并且来自记忆。抱歉,只是提供一个快速答案,目前我没有工具来测试此问题并发布调查结果。