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

Python如何在多压缩文件夹的.csv文件中搜索字符串并复制匹配压缩包

Python 批量压缩包检索匹配脚本

以下代码直接整合了你两段代码的功能,不需要提前手动解压所有压缩包,直接在内存中读取压缩包内CSV文件完成检测,对初学者友好,全部使用Python标准库,无需额外安装依赖:

import os
import zipfile
import shutil

# -------------------------- 请修改以下参数 --------------------------
# 存放所有待检测zip压缩包的文件夹路径
source_zip_dir = "./your_source_zip_folder"
# 匹配成功的压缩包要保存到的目标文件夹路径
target_save_dir = "./matched_zips"
# 要搜索的目标字符串
search_str = "PROGRAM"
# -------------------------------------------------------------------

# 自动创建目标文件夹如果不存在
os.makedirs(target_save_dir, exist_ok=True)

# 遍历源目录下所有文件
for filename in os.listdir(source_zip_dir):
    # 只处理zip格式压缩包
    if not filename.lower().endswith(".zip"):
        continue
    
    zip_path = os.path.join(source_zip_dir, filename)
    print(f"正在检测压缩包:{filename}")
    is_matched = False

    try:
        # 打开压缩包(对应第一段代码的逻辑)
        with zipfile.ZipFile(zip_path, 'r') as zf:
            # 遍历压缩包内所有文件
            for file_info in zf.infolist():
                # 只处理后缀为.csv的文件
                if not file_info.filename.lower().endswith(".csv"):
                    continue
                
                # 读取压缩包内csv文件内容,不需要解压到本地
                with zf.open(file_info, 'r') as csv_f:
                    # 逐行读取检测字符串(对应第二段代码的逻辑)
                    line_num = 1
                    for line in csv_f:
                        # 处理编码兼容问题,忽略无法解码的字符
                        try:
                            line_str = line.decode('utf-8')
                        except:
                            line_str = line.decode('gbk', errors='ignore')
                        
                        if search_str in line_str:
                            print(f"匹配成功:压缩包[{filename}] 内的CSV文件[{file_info.filename}] 第{line_num}行找到目标字符串")
                            is_matched = True
                            # 找到就跳出,不需要继续读当前文件剩余内容
                            break
                        line_num += 1
                
                # 只要有一个csv匹配成功,就跳出压缩包内文件遍历,节省时间
                if is_matched:
                    break
    except Exception as e:
        print(f"压缩包{filename}处理失败,错误信息:{str(e)},跳过该文件")
        continue

    # 如果匹配成功,就把整个压缩包复制到目标文件夹
    if is_matched:
        target_path = os.path.join(target_save_dir, filename)
        # 避免目标文件夹有重名文件覆盖,也可以自己修改重命名逻辑
        if os.path.exists(target_path):
            print(f"目标文件夹已存在同名文件{filename},跳过复制")
        else:
            shutil.copy2(zip_path, target_path)
            print(f"已将匹配成功的压缩包{filename}复制到目标文件夹")

print("所有压缩包检测完成")

使用说明

  1. 先修改代码上方的三个参数:
    • source_zip_dir:替换成你存放所有待检测zip压缩包的文件夹路径,Windows路径可以写成r"C:\Users\xxx\zip_folder"避免反斜杠转义问题
    • target_save_dir:替换成你要保存匹配成功压缩包的文件夹路径
    • search_str:替换成你要搜索的目标字符串
  2. 直接运行脚本即可,运行过程中会打印处理进度和匹配结果

优化点说明

相比把压缩包全部解压后再检索的方案,该实现有两个优势:

  • 不需要占用额外磁盘空间存放解压后的文件
  • 只要找到匹配的内容就立即终止当前压缩包的检测,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:00