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

递归查找嵌套Zip中的文件为何始终返回None?

问题分析与解决方案

代码返回None的原因

  • 递归调用未传递返回结果:遇到嵌套.zip文件时,你调用了zip_to_df(zip_file.open(name))但没有将递归得到的结果返回给上层函数,导致外层无法获取内层找到的DataFrame,函数执行到末尾默认返回None。
  • CSV匹配逻辑不符合需求:原代码仅判断文件是否以.csv结尾,但你实际需要定位的是文件名包含_foo_的CSV文件,这会导致误匹配无关CSV或漏找目标文件。

修正后的代码

from zipfile import ZipFile
import pandas as pd

fp = r'C:\Users\rendezvous\Downloads\1st.zip'

def zip_to_df(fp):
    zip_file = ZipFile(fp)
    for name in zip_file.namelist():
        # 精准匹配包含'_foo_'且以.csv结尾的目标文件
        if '_foo_' in name and name.endswith('.csv'):
            df = pd.read_csv(zip_file.open(name))
            return df
        elif name.endswith('.zip'):
            # 递归调用后返回结果,确保内层找到的DataFrame能传递到外层
            inner_df = zip_to_df(zip_file.open(name))
            if inner_df is not None:
                return inner_df
    # 当前压缩包内未找到目标文件时返回None
    return None

df = zip_to_df(fp)

补充说明

  • 修复了递归调用的返回逻辑,确保内层找到的结果能向上传递。
  • 调整文件匹配规则,精准定位符合*_foo_*.csv格式的文件。
  • 增加递归结果判断,兼容2nd.zip可选的层级结构(目标文件可能直接在1st.zip内)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:02:05