多层多路径子文件夹批量解压压缩包到指定目录(以B2Z格式压缩包为例)

下载了个层级特别多的压缩包,命名为Apr,Apr下面有30个文件夹,代表30天,每个文件夹下有24个文件夹,代表24个小时,每个小时文件夹下有60个压缩包,代表60分钟,累计43200个压缩包,人工解压太费时间,因此写了个代码批量解压。文件路径有多层,Apr/01/01/00.json.b2z代表4月1日01点00分的数据。

我把所有解压的文件都另存到新的文件夹,如Apr/01/01所有子文件夹下的压缩包(从Apr/01/01/00.json.b2z到Apr/01/01/59.json.b2z)都解压到April/01/01中,名称不变,即Apr/01/01/00.json.b2z解压后为Apr/01/01/00.json,大家可以根据自己的需要解压到文件夹或者其他格式文件中。

import os
import bz2  #这里可以自行替换为需要的解压工具,比如zipfile等等

path = 'D:\data\Apr'
un_path = 'D:\data\April\\'
for (dirpath, dirnames, files) in os.walk(path):  #遍历主文件夹下所有压缩包
    for filename in files:
        filepath = os.path.join(dirpath, filename) #压缩包路径,例如D:\data\Apr\01\01\00.json.b2z
        newfilepath = un_path + filepath[-17:-4]  #压缩包存储名,例如D:\data\April\01\01\00.json
        pathdir = newfilepath[:-8] #压缩包存储路径,例如D:\data\April\01\01
        if not os.path.exists(pathdir):
            os.makedirs(pathdir)  #如果不存在路径则新建
        new_file = open(newfilepath, 'wb')
        file = bz2.BZ2File(filepath, 'rb') #解压
        for data in iter(lambda: file.read(100 * 1024), b''):
            new_file.write(data)  #写入

你可能感兴趣的:(Python应用)