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

Python实现遍历Zip文件,检查内部指定HTML字符串并移动文件

批量检查Zip文件并移动符合条件的文件

问题分析

需要遍历指定文件夹下的所有Zip文件,检查每个Zip中是否存在末尾为bb.html的HTML文件,若该文件包含指定字节串(比如b'Health'),则将整个Zip文件移动到目标文件夹。

现有代码的问题

你的最终代码存在以下几个问题:

  • 缺少shutil模块的导入(用于文件移动/复制)
  • 语法错误:if b'Health in file: 未闭合字符串引号
  • 函数依赖全局变量,代码耦合度高,不利于维护
  • 未处理Zip文件中不存在bb.html的情况,会触发异常
  • 重复创建ZipFile对象,造成资源浪费

修正后的完整代码

import os
import zipfile
import shutil

# 配置文件夹路径
SOURCE_FOLDER = r'J:/server/zippedMessages'  # 存放待检查Zip的文件夹
DEST_FOLDER = r'L:/_Mine/Zipped Messages Moved'  # 存放符合条件Zip的目标文件夹
TARGET_HTML_SUFFIX = 'bb.html'  # 要检查的HTML文件后缀
SEARCH_STRING = b'Health'  # 要查找的字节串(zip.read返回字节流,需用字节串匹配)

def check_and_move_zip(zip_path):
    """检查单个Zip文件,符合条件则移动"""
    try:
        with zipfile.ZipFile(zip_path, 'r') as zip_ref:
            # 筛选Zip内所有以TARGET_HTML_SUFFIX结尾的文件
            target_files = [f for f in zip_ref.namelist() if f.endswith(TARGET_HTML_SUFFIX)]
            
            if not target_files:
                print(f"[{os.path.basename(zip_path)}] 未找到以{TARGET_HTML_SUFFIX}结尾的文件")
                return
            
            # 检查每个目标文件是否包含指定字符串
            for file_name in target_files:
                file_content = zip_ref.read(file_name)
                if SEARCH_STRING in file_content:
                    # 移动文件到目标文件夹
                    shutil.move(zip_path, os.path.join(DEST_FOLDER, os.path.basename(zip_path)))
                    print(f"[{os.path.basename(zip_path)}] 找到指定字符串,已移动")
                    return  # 找到一个符合条件就停止检查,直接移动
            print(f"[{os.path.basename(zip_path)}] 未找到指定字符串")
    except Exception as e:
        print(f"[{os.path.basename(zip_path)}] 处理出错: {str(e)}")

def main():
    # 确保目标文件夹存在,不存在则自动创建
    if not os.path.exists(DEST_FOLDER):
        os.makedirs(DEST_FOLDER)
    
    # 遍历源文件夹中的所有内容
    for filename in os.listdir(SOURCE_FOLDER):
        file_path = os.path.join(SOURCE_FOLDER, filename)
        # 只处理后缀为.zip的文件(排除子文件夹)
        if os.path.isfile(file_path) and filename.endswith('.zip'):
            check_and_move_zip(file_path)

if __name__ == "__main__":
    main()

关键代码说明

  1. 路径配置:用大写常量定义路径,r前缀避免转义字符干扰,后续修改更方便
  2. check_and_move_zip函数:
    • 用with语句管理ZipFile对象,自动关闭文件,避免资源泄漏
    • 通过zip_ref.namelist()获取Zip内所有文件,筛选出目标HTML文件
    • 捕获异常,保证单个文件处理失败时,程序能继续处理其他文件
    • 用shutil.move实现文件移动(需要复制的话换成shutil.copy即可)
  3. main函数:
    • 先检查目标文件夹是否存在,不存在则创建,避免移动时出错
    • 遍历源文件夹,只处理.zip后缀的文件,自动跳过子文件夹

使用提示

  1. 把SOURCE_FOLDER、DEST_FOLDER改成你的实际路径
  2. 按需调整TARGET_HTML_SUFFIX(如果是精确匹配bb.html,可以把筛选条件改成f == 'bb.html')和SEARCH_STRING
  3. 直接运行代码即可批量处理所有Zip文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:40:43