要解压的目录结构和要解压成的目录结构如下:
ILSVRC2012_img_train.tar
n01440764.tar
n01440764_18.JPEG
n01440764_36.JPEG
...
n01443537.tar
n01443537_2.JPEG
...
n01484850.tar
n01484850_17.JPEG
...
...
想解压成如下效果:
ILSVRC2012_img_train 文件夹
n01440764 文件夹
n01440764_18.JPEG
n01440764_36.JPEG
...
n01443537 文件夹
n01443537_2.JPEG
...
n01484850 文件夹
n01484850_17.JPEG
...
...
解压代码如下:
import os
import tarfile
file_path = './ILSVRC2012_img_train.tar'
file_name = file_path.split('/')[-1].split('.tar')[0]
os.mkdir(file_name) # 生成ILSVRC2012_img_train文件夹
tar = tarfile.open(file_path)
tar.extractall(file_name) # 第一层解压,将对ILSVRC2012_img_train.tar进行解压
sub_tar_file_name_list = tar.getnames() # 获取ILSVRC2012_img_train.tar中的子目录
sub_file_name_list = []
for sub_tar_file_name in sub_tar_file_name_list:
sub_file_name_list.append(sub_tar_file_name.split('.tar')[0])
for dir_name in sub_file_name_list:
os.mkdir(file_name+'/'+dir_name) # 生成不带.tar的目录
tar.close()
for extract_name in sub_tar_file_name_list:
sub_tar = tarfile.open('./'+file_name+'/'+extract_name)
sub_tar.extractall('./'+file_name+'/'+extract_name.split('.tar')[0]) # 第二次解压
sub_tar.close()
os.system('rm -rf '+'./'+file_name+'/'+extract_name) # 删除第一层解压后的第二层带.tar的文件
# os.system('rm -rf file_path) 如果想将ILSVRC2012_img_train.tar也删除了就使用这个