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

如何避免pandas to_excel将_x10e6_转换为ღ?追加Excel文件场景

解决openpyxl追加Excel时列名中_x10e6_被转为特殊字符的问题

这个问题的核心是openpyxl会自动解析_xXXXX_格式的字符串为对应Unicode实体(_x10e6_对应U+10E6字符ღ),和文件编码无关,所以调整encoding参数无效。以下是可行的解决方法:

步骤1:临时替换列名,避免自动解析

在将Pandas DataFrame写入Excel前,把列名中的_x10e6_替换为一个不会被识别为实体编码的临时标记:

goldDF = spark.read.format('csv')\
    .option('header', True)\
    .option('delimiter', ',')\
    .load(file_path)

pandaDF = goldDF.toPandas()

# 替换列名中的_x10e6_为临时标记
pandaDF.columns = [col.replace('_x10e6_', 'TEMP_X10E6_PLACEHOLDER') for col in pandaDF.columns]

with pd.ExcelWriter('/tmp/output.xlsx', mode='a', engine='openpyxl') as writer:  
    pandaDF.to_excel(writer, sheet_name=name, index=False)

步骤2:修改Excel表头,恢复原列名

写入完成后,用openpyxl直接加载文件,将表头中的临时标记替换回_x10e6_:

from openpyxl import load_workbook

# 加载已写入的Excel文件
wb = load_workbook('/tmp/output.xlsx')
ws = wb[name]

# 遍历表头行(第一行)替换标记
for cell in ws[1]:
    if cell.value:
        cell.value = cell.value.replace('TEMP_X10E6_PLACEHOLDER', '_x10e6_')

# 保存修改
wb.save('/tmp/output.xlsx')

# 复制到Delta Lake路径
dbutils.fs.cp("file:/tmp/output.xlsx", "/mnt/delta_lake_path")

原理说明

openpyxl遵循Office Open XML规范,会自动将_x[0-9A-F]{4}_格式的字符串解码为对应的Unicode字符。通过临时替换的方式,避开这一自动解析逻辑,写入后再恢复原列名,就能保留_x10e6_的原始文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:15:42