读取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
相关产品推荐
相关产品推荐

