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

读取Excel文件报嵌入空字符及格式与扩展名不匹配错误如何解决?

问题解决:Excel格式扩展名不匹配+embedded null character读取报错

错误根因

  • 打开Excel弹出格式与扩展名不匹配提示,说明该文件并非标准.xls二进制格式文件,大概率是被人为修改了扩展名的文本类文件(csv/tsv/html格式改后缀伪装成xls),或是存在损坏、加密的异常文件
  • 原代码写法存在逻辑错误:read_csv/read_excel可直接接收文件路径参数,不需要手动open读取文件内容后传入,手动读取内容时遇到文件内的空字符就会直接触发embedded null character报错

分步解决方法

第一步:修正代码写法,直接传递文件路径调用pandas接口

优先尝试用xls专用引擎读取:

import pandas as pd
file_path = r"C:\Users\my_username\Documents\my_file.xls"
# 用xlrd引擎读取xls格式文件
try:
    df = pd.read_excel(file_path, engine="xlrd")
except Exception as e:
    print(f"excel格式读取失败: {e}")

如果上述代码报错,说明文件本质不是xls格式,尝试按文本文件读取:

# 先试国内常用的gbk编码,自动忽略编码错误和异常行
try:
    df = pd.read_csv(
        file_path,
        encoding="gbk",
        encoding_errors="ignore",
        on_bad_lines="skip"
    )
except Exception as e:
    # 换utf-8编码重试
    df = pd.read_csv(
        file_path,
        encoding="utf-8",
        encoding_errors="ignore",
        on_bad_lines="skip"
    )

第二步:手动预处理清除空字符

如果仍然报空字符相关错误,先读取二进制内容清除所有空字符后再读取:

from io import BytesIO

# 读取二进制内容并替换所有空字符
with open(file_path, "rb") as f:
    content = f.read().replace(b"\x00", b")

# 先尝试按excel格式读取处理后的内容
try:
    df = pd.read_excel(BytesIO(content), engine="xlrd")
# 失败则按文本格式读取
except:
    df = pd.read_csv(BytesIO(content), encoding="gbk", encoding_errors="ignore")

第三步:特殊格式兼容处理

如果以上方法都失效,可手动用记事本打开该xls文件,判断真实格式后适配处理:

  • 若打开后是带<table>标签的html内容,说明是网页导出的表格,改用pd.read_html(file_path)读取
  • 若打开后是逗号/制表符分隔的纯文本,直接修改文件扩展名为.csv后再用read_csv读取
  • 若打开是乱码,说明文件已损坏或加密,需要先解密或重新获取原始未修改的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:04