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

如何获取requests.get()返回的二进制Excel数据的工作表数量及扩展名?

爬取Excel文件:获取工作表总数与确定文件扩展名

1. 获取未知数量的Excel工作表

不用提前硬编码工作表数量,直接用pandas.ExcelFile加载二进制响应内容,就能拿到所有工作表的信息:

import pandas as pd

# 把二进制响应内容加载为ExcelFile对象
excel_handler = pd.ExcelFile(res.content)
# 获取所有工作表名称的列表
all_sheets = excel_handler.sheet_names
# 工作表总数就是列表长度
total_sheets = len(all_sheets)

# 循环遍历每个工作表并保存
for sheet_name in all_sheets:
    df = excel_handler.parse(sheet_name)
    df.to_excel(f"{db}{sheet_name}.xlsx", index=False)  # 建议加上index=False避免保存索引列

这种方式不仅能拿到总数,还能直接用工作表的真实名称命名输出文件,比用索引循环更直观可靠。

2. 确定二进制数据的正确扩展名

如果不知道下载的二进制文件是什么格式,可以通过两种方式判断:

方式一:从响应头获取类型

服务器返回的Content-Type响应头通常会标明文件类型,我们可以做映射匹配:

# 提取响应头里的Content-Type
content_type = res.headers.get('Content-Type', '')

# 常见表格文件的Content-Type与扩展名映射
type_ext_map = {
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': '.xlsx',
    'application/vnd.ms-excel': '.xls',
    'text/csv': '.csv',
    'text/plain': '.txt'
}

# 获取对应扩展名,默认返回.unknown
file_ext = type_ext_map.get(content_type.split(';')[0], '.unknown')

注意有些Content-Type会带额外参数(比如charset=utf-8),所以用split(';')[0]只取主类型。

方式二:通过文件签名(Magic Number)识别

如果响应头信息不准确,可以读取二进制数据的前几个字节(文件签名)来判断,这是更可靠的方式:

def detect_file_extension(byte_content):
    # 检查二进制内容的开头字节(文件签名)
    if byte_content.startswith(b'PK\x03\x04'):
        # PK开头是ZIP压缩格式,xlsx本质是压缩包
        return '.xlsx'
    elif byte_content.startswith(b'D\x00\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00'):
        # 旧版xls文件的签名
        return '.xls'
    elif byte_content.startswith(b'\xef\xbb\xbf'):
        # UTF-8 BOM开头,可能是CSV或文本文件
        sample = byte_content[:100].decode('utf-8')
        return '.csv' if ',' in sample else '.txt'
    else:
        return '.unknown'

file_ext = detect_file_extension(res.content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:42:47