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

使用Pandas读取zip压缩包内全部txt文件的代码调整及报错解决

问题说明

你当前遇到两个核心问题:

  1. 原代码仅能读取单文件的原因:你确实猜对了问题根源,zip_csv_file = zip_csv_files[0] 是取符合条件的文件列表的第一个元素,所以永远只能处理1个txt文件,没有遍历所有符合条件的文件
  2. 后续报错UnboundLocalError的原因:部分下载的zip压缩包内不存在「后缀为.txt、文件名不含pre」的文件,导致zip_csv_files是空列表,你修改代码时没有做空列表判断就直接引用zip_csv_file变量,触发了未赋值就引用的错误
修正后完整代码
def custom_parse(self, response):
    self.logger.info(response.url)
    links = response.xpath("//a[contains(@href, '.zip')]/@href").getall()
    for link in list(set(links)):
        print(link)
        local_path = self.download_file("https://www.sec.gov" + link)
        zip_file = zipfile.ZipFile(local_path)
        # 筛选符合条件的txt文件
        zip_csv_files = [file_name for file_name in zip_file.namelist() if file_name.endswith(".txt") and "pre" not in file_name]
        # 空列表判断,没有符合条件的文件直接跳过当前压缩包
        if not zip_csv_files:
            continue
        # 遍历所有符合条件的文件,替代原来只取第一个的逻辑
        for zip_csv_file in zip_csv_files:
            with zip_file.open(zip_csv_file, "r") as zip:
                df = pd.read_csv(BytesIO(zip.read()), dtype=str, sep='\t')
            df = self.standardized(df)
            for k, row in df.iterrows():
                yield dict(row)
修改点说明
  • 增加了空列表判断逻辑,不存在符合条件的文件时直接跳过当前压缩包,避免变量未定义报错
  • 将原来仅取第一个文件的逻辑替换为遍历所有符合条件的文件,每个文件都会单独读取、处理并输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:24:05