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

如何用Python批量提取250个日期命名文件夹中的H1.gz文件

用Python批量处理H1.gz文件的解决方案

下面分两种常见需求给出实现代码,你可以根据实际情况选择:

需求1:直接复制所有H1.gz文件到汇总文件夹

如果只是要把所有H1.gz文件集中到一个文件夹,用以下代码:

import os
import shutil
import re

# 替换为实际路径
source_parent_dir = r"C:\存放所有日期文件夹的根目录"
target_dir = r"C:\你要汇总到的目标文件夹"

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

# 匹配YYYYMMDD格式的文件夹名
date_folder_pattern = re.compile(r'^\d{8}$')

# 遍历根目录下的所有子项
for folder_name in os.listdir(source_parent_dir):
    folder_full_path = os.path.join(source_parent_dir, folder_name)
    # 只处理符合日期格式的文件夹
    if os.path.isdir(folder_full_path) and date_folder_pattern.match(folder_name):
        h1_gz_path = os.path.join(folder_full_path, "H1.gz")
        if os.path.exists(h1_gz_path):
            # 给文件名加上日期前缀,避免重名覆盖
            target_file_path = os.path.join(target_dir, f"{folder_name}_H1.gz")
            shutil.copy2(h1_gz_path, target_file_path)
            print(f"完成复制: {h1_gz_path}")
        else:
            print(f"警告: {folder_full_path} 中未找到H1.gz")

需求2:解压所有H1.gz文件到汇总文件夹

如果需要把每个H1.gz里的内容解压出来汇总,分两种情况处理:

情况A:H1.gz是单个文件的压缩包

import os
import gzip
import shutil
import re

source_parent_dir = r"C:\存放所有日期文件夹的根目录"
target_dir = r"C:\你要汇总到的目标文件夹"

os.makedirs(target_dir, exist_ok=True)
date_folder_pattern = re.compile(r'^\d{8}$')

for folder_name in os.listdir(source_parent_dir):
    folder_full_path = os.path.join(source_parent_dir, folder_name)
    if os.path.isdir(folder_full_path) and date_folder_pattern.match(folder_name):
        h1_gz_path = os.path.join(folder_full_path, "H1.gz")
        if os.path.exists(h1_gz_path):
            # 用日期前缀命名解压后的文件,避免重名
            extracted_file_path = os.path.join(target_dir, f"{folder_name}_H1")
            with gzip.open(h1_gz_path, 'rb') as f_in:
                with open(extracted_file_path, 'wb') as f_out:
                    shutil.copyfileobj(f_in, f_out)
            print(f"完成解压: {h1_gz_path}")
        else:
            print(f"警告: {folder_full_path} 中未找到H1.gz")

情况B:H1.gz是tar.gz格式的多文件压缩包

如果你的H1.gz实际是tar.gz(包含多个文件),用以下代码:

import os
import tarfile
import shutil
import re

source_parent_dir = r"C:\存放所有日期文件夹的根目录"
target_dir = r"C:\你要汇总到的目标文件夹"

os.makedirs(target_dir, exist_ok=True)
date_folder_pattern = re.compile(r'^\d{8}$')

for folder_name in os.listdir(source_parent_dir):
    folder_full_path = os.path.join(source_parent_dir, folder_name)
    if os.path.isdir(folder_full_path) and date_folder_pattern.match(folder_name):
        h1_gz_path = os.path.join(folder_full_path, "H1.gz")
        if os.path.exists(h1_gz_path):
            with tarfile.open(h1_gz_path, 'r:gz') as tar:
                # 提取所有文件到临时目录,再重命名避免冲突
                temp_extract_dir = os.path.join(target_dir, f"temp_{folder_name}")
                tar.extractall(temp_extract_dir)
                # 将提取的文件移动到目标目录并加上日期前缀
                for root, _, files in os.walk(temp_extract_dir):
                    for file in files:
                        old_file_path = os.path.join(root, file)
                        new_file_path = os.path.join(target_dir, f"{folder_name}_{file}")
                        shutil.move(old_file_path, new_file_path)
                # 删除临时目录
                shutil.rmtree(temp_extract_dir)
            print(f"完成解压: {h1_gz_path}")
        else:
            print(f"警告: {folder_full_path} 中未找到H1.gz")

注意事项

  • 路径前加r是为了避免Windows路径中的反斜杠被当作转义字符
  • exist_ok=True需要Python 3.2及以上版本,如果你用的是旧版本,可以替换成以下代码创建文件夹:
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
  • 给文件加日期前缀是为了避免不同日期的文件重名覆盖,如果你不需要可以去掉相关命名逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:20:30