发布时间:2026-07-21阅读(1)
背景:
最近在整理以前的老照片,也买了一个刻录机,想将以前的老照片刻录成光盘做一个备份。
但是碰到一个问题,老照片有几百GB,每张光盘只能存4.7 GB,就需要将文件夹进行分割。
刻录软件分割会将同一个文件数据切分到不同光盘。
想到用压缩软件,分卷压缩,指定卷大小,但是这个方法有问题:
A:光盘上的文件没法直接浏览。
B:最终会刻录几十张盘,如果有一张损坏或者遗失,整个数据就会丢失。
网上找了 Folder Axe,可以将文件夹按大小切分,但是他将文件整体平铺切分到指定目录下,没有保留原文件路径信息。
找了半天,没办法,只好自己用python写了一个工具来切分文件夹,满足如下功能:
1:可以指定切分后文件夹大小,保证切分后每个文件夹小于等于指定大小。
2:保留原目录结构(备注:一个子文件夹可能会被切分到多个目标文件夹下)。
用法:
python filesplit.py 源文件夹 目标文件夹 大小(单位 GB,4.7GB则输入 4.7)
import osimport shutilimport sysimport osg_src_dir = g_dst_dir = g_folder_index = 0g_cd_size = 4.7g_sum_size = 0def SplitFolder(src_dir_name): try: ls=os.listdir(src_dir_name) isexists=os.path.exists(g_dst_dir) if not isExists: os.makedirs(g_dst_dir) except Exception as e : print dir error. repr(e) else: for fn in ls: tempfile=os.path.join(src_dir_name,fn) if (os.path.isdir(tempfile)): SplitFolder(tempfile) else: temprealpth = tempfile[len(g_src_dir) 1:] try: size = os.path.getsize(tempfile) global g_sum_size if g_sum_size size > (g_cd_size -0.1)*1000*1000*1000 : g_sum_size = 0 global g_folder_index g_folder_index = g_folder_index 1 g_sum_size = g_sum_size size dstpath = os.path.join(os.path.join(g_dst_dir,cd str(g_folder_index)),temprealpth) (tempfilepath, tempfilename) = os.path.split(dstpath) isExists = os.path.exists(tempfilepath) if not isExists: os.makedirs(tempfilepath) print mv file: tempfile : dstpath cmd = cp -f " tempfile " " dstpath " cmdnew = cmd.replace(\\,\\\\) #print cmdnew #os.system (cmdnew) shutil.copy2(tempfile, dstpath) except Exception as e : print error path: tempfile print error. repr(e) print(mv end!) if __name__ == "__main__": if len(sys.argv) < 3 : print(" args < 3") print sourcepath dstpath size(ex:4.7) exit() g_src_dir = sys.argv[1] g_dst_dir = sys.argv[2] g_cd_size = float(sys.argv[3]) g_folder_index = 0 print sourcepath: g_src_dir print dstpath: g_dst_dir print size: str(g_cd_size) SplitFolder(g_src_dir)

上一篇:回归数据标准化数据向量化
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图