下载了个层级特别多的压缩包,命名为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) #写入