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

