2016-06-07 150 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

謝謝!儘管存在一個小問題,但這是有效的。空的子文件夾也正在創建。 –

相關問題