当前位置: 首页 > news >正文

Python 解析“长得像 list 的 Document 字符串“:

Python 解析"长得像 list 的 Document 字符串":提取 page 并拼接(别再无脑 eval)

这是字符串转 list 系列的第 2 题。第 1 题里字符串是标准的 JSON / Python 列表,用json.loads/ast.literal_eval就能解决。

但这一题的字符串不是普通列表,而是一堆Document(...)——它是 LangChain 里Document对象的字符串表示(repr)

目标:取出每个 Document 的page(页码),并把每页的page_content(正文)拼接起来。

一、为什么第 1 题的方法在这里全部失效

这个字符串里既有单引号,又有Document(metadata=..., page_content=...)这种函数调用写法,它既不是 JSON,也不是 Python 字面量:

所以第 1 题那套在这里直接报废。

二、最稳的解法:正则提取(不碰 eval,最安全)

既然字符串格式是固定的Document(metadata={...}, page_content='...'),我们用正则只解析结构,不执行任何代码。这样无论来源是否可信都很安全。

思路:

  1. 用正则找出每一段Document(...),抓出它的metadata={...}page_content='...'
  1. 从 metadata 里取'page': 数字
  1. 把每段的page_content收集起来,按需拼接。

优点:纯正则、零执行、对任意来源都安全;不关心page_content里有什么奇怪字符,只认结构。

💡 小提示:如果原始字符串里的\n是"被转义过"的(\\n两个字符),提取出来的是字面量换行符。想要真正的换行,拼接前加一句:

三、拼接时想按"页码"排序怎么办

默认parse_documents是按字符串里出现的顺序返回的。如果你希望结果按page从小到大排:

四、如果你"完全掌控来源":用 eval 重建真实 Document

如果这段字符串确定是你自己代码print/repr出来的,绝对不会被外部篡改,也可以直接把它变回真正的Document对象,然后像平时一样用.metadata['page']访问:

⚠️为什么说"一般不推荐"eval执行字符串里的任意 Python 代码。一旦这段字符串来自用户、接口、数据库等外部输入,别人塞一句__import__('os').system('rm -rf /')就能造成破坏。而且page_content里的转义字符(\n)会被eval当成真换行解析,行为取决于字符串来源,不可控

五、正确的设计:别把 Document 存成 repr 字符串

Documentrepr只是给人看的调试输出,不是稳定的序列化格式。如果你要持久化或传输 Documents,请用 JSON / pickle:

这样以后无论是取page、拼正文,还是存数据库,都规规矩矩,不用再跟repr字符串斗智斗勇。

六、三种方式对比

方式

安全性

是否需可信来源

适用场景

正则提取(推荐)

只能拿到字符串、来源不可信或不想引依赖

eval重建 Document

低(代码注入)

你 100% 信任这段 repr 字符串、临时调试

JSON 序列化 / 反序列化

从设计上就该这么存/传,根本不该出现 repr 字符串

七、总结

  • 字符串里是Document(metadata=..., page_content=...)这种repr,不是 JSON / 字面量,json.loads/ast.literal_eval都救不了;
  • 首选正则提取:抓metadata里的'page'page_content,安全又稳;
  • 需要真实Document对象且来源可信时可用eval,但务必清楚它的注入风险;
  • 治本办法:从一开始就用json.dumps序列化 Document,而不是把repr当数据存。

一句话:拿 page、拼正文,用正则;想省事又安全,从源头改用 JSON。

http://www.jsqmd.com/news/1370053/

相关文章:

  • Spring事务失效的八大场景与解决方案
  • 2026 降AI率工具深度实测”?:实力出众,科研党救急指南
  • 2026年8月广东宠物食品/宠物除臭剂行业公司推荐_广东皓泰动保食品科技有限公司 - 品牌宣传支持者
  • UE5蓝图Timeline节点全解析:从原理到实战,掌握动态效果制作
  • 保定评价高的光伏组件回收公司怎么选?保定圣能(保定联络处) - 热点品牌推荐
  • Java AI Agent框架:高性能企业级开发新选择
  • 选重庆铜梁知名的非遗制作龙灯制造厂认准铜梁龙舞龙灯厂(重庆铜梁联络处) - 热点品牌推荐
  • 2026年8月宁波蜗杆塑料齿轮/宁波高精度塑料齿轮厂家怎么选_宁波奉化双涛塑模厂 - 品牌宣传支持者
  • AI工程化核心概念解析:ChatBot、Workflow、Agent与Harness的边界与协同
  • Claude Opus 4.8深度评测:推理、长文本与代码生成的工业级提升
  • 冷门技巧:Python的万能工具箱:从脚本到后端开
  • 适合手机端使用的出入库管理软件:多款实测体验分享
  • Matlab实现综合能源系统碳交易与需求响应优化
  • 深入UGUI源码:性能优化与自定义组件实战指南
  • 颍州西湖古今舟
  • 2026年8月潍坊塑料造粒污水处理设备/布草洗涤污水处理设备厂家深度推荐_山东顺江环保装备有限公司 - 品牌宣传支持者
  • Java大厂面试秘籍:八股文高效备战指南
  • 2026 年至今,罗田优秀的防爆墙供货厂家综合实力解析,仓库角落那堵不起眼的墙,竟藏着能挡住重型爆炸的硬实力?-道元乾抗爆墙泄爆墙 - 企业推荐管【认证】
  • 河北牛栏网供应商怎么联系直接对接源头工厂卓奇丝网河北服务中心 - 热点品牌推荐
  • 2026年8月蜗轮塑料齿轮/宁波蜗轮塑料齿轮公司推荐精选_宁波奉化双涛塑模厂 - 行业平台推荐
  • 大模型接入调查岗位匹配度
  • OTP 语音芯片 vs Flash 方案:WT588F40B-16S 为什么适合小批量多改版
  • 无偏置线性层:原理、应用与Transformer模型优化实践
  • GFZRNX安装与RINEX格式转换实战指南
  • SpringBoot+Vue在线考试系统:从工程化思维到实战部署全解析
  • 从零实现Transformer语言模型:CS336作业详解与PyTorch实战
  • 2026年近期比较好的天津河北搬家服务团队 - 装修教育财税推荐2026
  • 逆向工程实战:城通网盘API链接生成与直链获取技术解析
  • 2026年8月惠东双月湾家庭聚餐海鲜/平海镇海鲜餐饮店哪家便宜_惠东县港口聚鲜港餐饮店 - 行业平台推荐
  • 脑机设备进入多校区后,怎样保证教学交付不走样?