需求
有一个大文件夹,里面有10万个小文件,有10G。需要转成小压缩包,每个压缩包250M左右。
分析
1、判断指定文件夹的大小;
2、转移文件,指定文件夹到250M时停止转移;
3、将指定文件夹进行压缩。
脚本如下
import os
import shutil
import time
ORIGINAL_PATH = f"/Users/Desktop/amyfiles/temp/"
SAVE_PATH = f'/Users/Desktop/amyfiles/temp/my_data/'
def get_folder_size(folder_path):
"""获取文件夹的大小"""
total_size = 0
for path, dirs, files in os.walk(folder_path):
for f in files:
fp = os.path.join(path, f)
total_size += os.path.getsize(fp)
size_m = int(total_size / (1024 * 1024))
return size_m
def start():
# for i in range(1, 100):
# final_path = f'{SAVE_PATH}/20231107_{i}'
final_path = f'{SAVE_PATH}/20231107_1'
if not os.path.exists(final_path):
os.makedirs(final_path)
for path, dirs, files in os.walk(ORIGINAL_PATH):
for num, f in enumerate(files):
# 判断文件夹大小
folder_size = get_folder_size(folder_path=final_path)
# 文件夹中的总文件大于250M停止移动
if folder_size and folder_size > 250:
break
# 转移文件
shutil.move(f'{ORIGINAL_PATH}/{f}', f'{final_path}/{f}')
time.sleep(0.01)
print(f'{num}, 已转移: {f}, 当前 {final_path} 大小: {folder_size}M')
# base_name:压缩打包后的文件名或者路径名
# format: 压缩或者打包格式 "zip", "tar", "bztar", "gztar"
# root_dir : 将哪个目录或者文件打包(也就是源文件)
shutil.make_archive(base_name=final_path, format='zip', root_dir=final_path)
if __name__ == '__main__':
start()