如何用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
相关产品推荐
相关产品推荐

