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

Python下载Zip文件并提取内容:动态Excel文件名处理问询

解决方案

1. 未知文件名时直接加载到Pandas

不需要把文件提取到本地,直接读取压缩包内的Excel文件即可,完全不用关心文件名变化:

import requests
import zipfile
import io
import pandas as pd

zip_file_url = "https://www.insee.fr/en/statistiques/series/xlsx/famille/102391902"  

# 下载并读取压缩包
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))

# 筛选压缩包内的Excel文件
excel_files = [file for file in z.namelist() if file.endswith(('.xlsx', '.xls'))]

# 假设压缩包内只有一个目标Excel文件,直接读取
if excel_files:
    with z.open(excel_files[0]) as f:
        df = pd.read_excel(f)
    # 查看数据示例
    print(df.head())
else:
    print("压缩包内未找到Excel文件")

2. 提取后保存为固定文件名(覆盖旧版本)

如果需要将文件保存到本地且避免重复,提取后直接重命名为固定名称,覆盖旧文件即可:

import requests
import zipfile
import io
import os
import pandas as pd

zip_file_url = "https://www.insee.fr/en/statistiques/series/xlsx/famille/102391902"  
fixed_filename = "monthly_data.xlsx"  # 自定义固定文件名

# 下载并读取压缩包
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))

# 筛选Excel文件
excel_files = [file for file in z.namelist() if file.endswith(('.xlsx', '.xls'))]

if excel_files:
    # 提取文件到当前目录
    extracted_path = z.extract(excel_files[0])
    # 先删除旧的固定文件(避免重命名报错)
    if os.path.exists(fixed_filename):
        os.remove(fixed_filename)
    # 重命名为固定文件名
    os.rename(extracted_path, fixed_filename)
    
    # 从固定文件加载数据到Pandas
    df = pd.read_excel(fixed_filename)
    print(df.head())
else:
    print("压缩包内未找到Excel文件")

关键说明

  • 用endswith(('.xlsx', '.xls'))筛选文件,确保只处理目标Excel文件
  • 重命名前删除旧文件,避免部分系统下直接重命名覆盖失败的问题
  • 如果压缩包内可能存在多个Excel文件,可根据文件名特征(如包含年份/月份关键词)进一步筛选,确保取到正确的目标文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:42:39