2016-06-07 144 views
2

我有一个带有几个子文件夹的zip文件夹。 testfolder.zip包含在给定的格式从带有子文件夹的zip文件夹中提取文件到一个文件夹

testfolder/files 1,2,3 
testfolder/Test1folder/files 5,6 
testfolder/Test2folder/files 7,8 

我需要的输出

testfolder /文件1,2,3,4,5,6,7,8文件

我能够解压该文件夹与其子文件夹,但不是以所需的方式。

这是我尝试到目前为止

import glob 
import os 
import zipfile 
folder = 'E:/Test' 
extension = '.zip' 
zip_files = glob.glob(folder + extension) 
for zip_filename in zip_files: 
    dir_name = os.path.splitext(zip_filename)[0] 
    os.mkdir(dir_name) 
    zip_handler = zipfile.ZipFile(zip_filename, "r") 
    zip_handler.extractall(dir_name) 

任何帮助将是非常appreciated.Thanks提前。

+0

子文件夹也被压缩?或只是文件夹? –

+0

只有主文件夹是拉链 –

回答

1

替换:

zip_handler.extractall(dir_name) 

像这样的东西:

for z in zip_handler.infolist(): 
    zip_handler.extract(z, dir_name) 

这应该采取在存档每个文件的时间和它提取到该目录中的相同点。

更新: 显然它仍然提取它们相对。通过添加几行代码到您的原始片段解决了这个问题:

for p, d, f in os.walk(folder, topdown= False): 
for n in f: 
    os.rename(os.path.join(p, n), os.path.join(dir_name, n)) 
for n in d: 
    os.rmdir(os.path.join(p, n))  

这将文件移动到基​​础文件夹,删除仍然是所有空文件夹。这一个我已经尝试和测试。

+0

抱歉,没有解决问题。仍然获得与子文件夹解压缩的文件夹较旧的输出 –

+1

对不起,花了一点时间,得到了一些东西。检查更新。它应该做的。 –

+0

谢谢!尽管存在一个小问题,但这是有效的。空的子文件夹也正在创建。 –

相关问题