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

如何从FDA官网加载Zip文件到Python并解决XLRDError问题

解决FDA伪XLS文件的加载问题

这些名为.xls的文件并非标准二进制Excel格式,而是制表符分隔的文本文件(TSV),只是被修改了后缀名。Excel因为有兼容解析能力,打开时仅弹出警告但能正常显示;但xlrd库(pd.read_excel默认依赖)只会解析标准二进制xls,因此抛出格式错误。

可行代码方案

方案1:直接远程读取Zip包内文件(无需本地解压)

import pandas as pd
import zipfile
import io
import requests

# 下载并读取FDA的Zip包
url = "https://www.accessdata.fda.gov/cder/ndcxls.zip"
response = requests.get(url)
zip_content = zipfile.ZipFile(io.BytesIO(response.content))

# 读取product文件(本质是TSV文本)
with zip_content.open("product.xls") as f:
    df_product = pd.read_csv(f, sep="\t", encoding="latin-1", low_memory=False)

# 读取package文件
with zip_content.open("package.xls") as f:
    df_package = pd.read_csv(f, sep="\t", encoding="latin-1", low_memory=False)

# 验证数据
print("Product数据预览:")
print(df_product.head())
print("\nPackage数据预览:")
print(df_package.head())

方案2:本地解压后读取文件

如果已经手动下载解压了Zip包,直接用以下代码读取:

import pandas as pd

# 读取本地的伪xls文件(实际是TSV)
df_product = pd.read_csv("product.xls", sep="\t", encoding="latin-1", low_memory=False)
df_package = pd.read_csv("package.xls", sep="\t", encoding="latin-1", low_memory=False)

# 验证数据
print(df_product.head())

关键说明

  • sep="\t":指定分隔符为制表符,匹配文件的实际格式
  • encoding="latin-1":适配文件的字符编码,避免乱码
  • low_memory=False:关闭pandas的内存优化,避免因列类型自动推断产生的警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:42:45