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

使用Python Polars生成XML的字符转义问题:寻求更优方案

解决Polars生成XML时的字符转义问题

直接用Polars的str.map_elements结合xml.sax.saxutils.escape就能搞定,比手动多次replace高效得多,还不会漏处理特殊字符。

核心思路

xml.sax.saxutils.escape是处理Python字符串的工具,但Polars的Expr是表达式对象,不能直接传入这个函数。用str.map_elements可以把这个Python函数应用到列的每一个字符串元素上,完美适配Polars的表达式体系。

代码示例

import polars as pl
from xml.sax.saxutils import escape

# 构造测试数据
df = pl.DataFrame({
    "title": ["Python & Polars", "<XML>生成测试</XML>"],
    "description": ['包含"双引号"和\'单引号\'的文本', None]
})

# 对需要转义的列批量处理
df_processed = df.with_columns(
    pl.col("title", "description")
    .str.map_elements(escape, na_action="ignore")  # na_action跳过空值避免报错
    .suffix("_escaped")
)

# 生成XML片段
xml_output = df_processed.select(
    pl.concat_str([
        "<entry>",
        pl.col("title_escaped").map_elements(lambda x: f"<title>{x}</title>"),
        pl.col("description_escaped").map_elements(lambda x: f"<description>{x}</description>" if x else ""),
        "</entry>"
    ]).alias("xml_entry")
)

# 打印最终XML结果
print("\n".join(xml_output["xml_entry"].to_list()))

为什么这方法更好

  1. 简洁性:不用手动写一堆str.replace("&", "&amp;").replace("<", "&lt;"),escape已经内置处理了所有XML特殊字符(&、<、>、"、')。
  2. 可靠性:官方工具函数不会遗漏特殊字符,避免手动替换导致的XML格式错误。
  3. 适配Polars:map_elements完美对接Polars的表达式API,不会出现类型不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:01:16