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

如何用Python从100GB文件夹中仅复制10GB的.txt文件?

限制总大小的TXT文件复制实现

以下是修改后的Python脚本,可实现扫描目标文件夹并复制TXT文件,直到累计文件大小达到10GB时停止:

import os
import shutil

def copy_txt_files_with_size_limit(source_dir, target_dir, max_total_size_gb=10):
    # 转换阈值为字节,1GB = 1024^3 字节(若需十进制计算,改为10**9)
    max_total_size = max_total_size_gb * 1024 ** 3
    current_total_size = 0

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

    # 遍历源文件夹下所有文件(包括子文件夹)
    for root, dirs, files in os.walk(source_dir):
        for file in files:
            if file.lower().endswith('.txt'):
                file_path = os.path.join(root, file)
                # 获取文件大小(字节)
                try:
                    file_size = os.path.getsize(file_path)
                except OSError as e:
                    print(f"无法获取文件大小 {file_path}: {e}")
                    continue

                # 判断累计大小是否超过阈值
                if current_total_size + file_size > max_total_size:
                    print(f"累计大小即将超过{max_total_size_gb}GB,停止复制")
                    return

                # 复制文件到目标文件夹,保持相对路径结构(可选,若需直接放目标根目录可修改)
                relative_path = os.path.relpath(root, source_dir)
                target_file_dir = os.path.join(target_dir, relative_path)
                os.makedirs(target_file_dir, exist_ok=True)
                target_file_path = os.path.join(target_file_dir, file)

                try:
                    shutil.copy2(file_path, target_file_path)
                    current_total_size += file_size
                    print(f"已复制 {file_path},当前累计大小: {current_total_size / 1024**3:.2f}GB")
                except OSError as e:
                    print(f"复制文件失败 {file_path}: {e}")

    print(f"复制完成,累计总大小: {current_total_size / 1024**3:.2f}GB")

# 示例调用
if __name__ == "__main__":
    SOURCE_FOLDER = "/path/to/source"
    TARGET_FOLDER = "/path/to/target"
    copy_txt_files_with_size_limit(SOURCE_FOLDER, TARGET_FOLDER)

关键说明

  • 大小单位转换:脚本默认用二进制计算(1GB=1024³字节),如果需要按十进制(1GB=10⁹字节),修改max_total_size的计算式为max_total_size_gb * 10**9即可。
  • 路径结构保留:脚本会保持源文件夹的相对目录结构,若不需要,直接将target_file_path设为os.path.join(target_dir, file)即可。
  • 异常处理:加入了文件大小获取失败、复制失败的异常捕获,避免脚本中途崩溃。
  • 停止逻辑:当加入当前文件后会超过阈值时,直接停止复制;如果希望尽可能接近阈值(比如单个文件超过剩余空间也跳过),保持当前逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:36:43