无需本地下载 从URL直接导入xlsm宏文件到Python转为pandas数据帧
无需本地存储直接读取在线xlsm文件到pandas DataFrame的方法
依赖安装
首先安装需要的第三方库:
pip install pandas requests openpyxl
完整实现代码
import pandas as pd import requests from io import BytesIO # 目标xlsm文件地址 file_url = "https://www.bocsar.nsw.gov.au/Documents/Datasets/RCI_offencebymonth.xlsm" # 发起网络请求获取文件二进制内容 response = requests.get(file_url) # 校验请求是否成功,遇到网络错误会直接抛出异常 response.raise_for_status() # 将二进制内容转为内存中的类文件对象,无需写入本地磁盘 with BytesIO(response.content) as memory_file: # 读取xlsm文件,必须指定engine为openpyxl以支持带宏的Excel格式 # 可通过sheet_name参数指定要读取的工作表,不传默认读取第一个工作表 df = pd.read_excel(memory_file, engine="openpyxl") # 测试输出前5行数据 print(df.head())
常见调整说明
- 读取指定工作表:在
pd.read_excel方法中传入sheet_name参数,参数值可以是工作表名称(字符串格式)或工作表索引(从0开始计数的整数) - 自定义表头位置:如果文件表头不在第一行,传入
header=N参数,N为表头所在行的索引(从0开始计数) - 超时设置:如果网络环境不稳定,可在
requests.get中添加timeout参数,示例:requests.get(file_url, timeout=30)表示30秒未返回结果则抛出超时异常 - 安全提示:该方法仅读取文件内的表格数据,不会执行文件内嵌的宏代码,无宏运行安全风险
内容的提问来源于stack exchange,提问作者Lin Yu
相关产品推荐
相关产品推荐

