递归查找嵌套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
相关产品推荐
相关产品推荐

