2017-08-17 52 views
1

我有以下的目錄,在父目錄有幾個文件夾,可以說ABCD和每個文件夾內的名稱很多拉鍊的顯示,幷包含在名稱父文件夾的信一起其他信息:的Python:解壓在目錄樹中選擇文件

-parent--A-xxxAxxxx_timestamp.zip 
      -xxxAxxxx_timestamp.zip 
      -xxxAxxxx_timestamp.zip 
     --B-xxxBxxxx_timestamp.zip 
      -xxxBxxxx_timestamp.zip 
      -xxxBxxxx_timestamp.zip 
     --C-xxxCxxxx_timestamp.zip 
      -xxxCxxxx_timestamp.zip 
      -xxxCxxxx_timestamp.zip 
     --D-xxxDxxxx_timestamp.zip 
      -xxxDxxxx_timestamp.zip 
      -xxxDxxxx_timestamp.zip 

我需要解壓唯一入選的拉鍊在這棵樹,並放置在具有相同名稱相同的目錄,而.zip擴展。

輸出:

-parent--A-xxxAxxxx_timestamp 
      -xxxAxxxx_timestamp 
      -xxxAxxxx_timestamp 
     --B-xxxBxxxx_timestamp 
      -xxxBxxxx_timestamp 
      -xxxBxxxx_timestamp 
     --C-xxxCxxxx_timestamp 
      -xxxCxxxx_timestamp 
      -xxxCxxxx_timestamp 
     --D-xxxDxxxx_timestamp 
      -xxxDxxxx_timestamp 
      -xxxDxxxx_timestamp 

我的努力:

for path in glob.glob('./*/xxx*xxxx*'): ##walk the dir tree and find the files of interest 

    zipfile=os.path.basename(path) #save the zipfile path 
    zip_ref=zipfile.ZipFile(path, 'r') 
    zip_ref=extractall(zipfile.replace(r'.zip', '')) #unzip to a folder without the .zip extension 

的問題是,我不知道如何拯救A,B,C,d等,包括他們在所在的路徑文件將被解壓縮。因此,解壓縮的文件夾是在父目錄中創建的。有任何想法嗎?

+0

而不是試圖做到這一點在一氣呵成,第一個進去'.',然後讓每個文件夾內的所有文件的清單,並檢查文件夾名稱中是否出現所有文件夾列表它。 –

回答

1

您的代碼似乎工作正常,您只是爲了確保您不覆蓋變量名稱並使用正確的代碼。下面的代碼工作完美的我

import os 
import zipfile 
import glob 

for path in glob.glob('./*/xxx*xxxx*'): ##walk the dir tree and find the files of interest 

    zf = os.path.basename(path) #save the zipfile path 
    zip_ref = zipfile.ZipFile(path, 'r') 
    zip_ref.extractall(path.replace(r'.zip', '')) #unzip to a folder without the .zip extension 
1

,而不是試圖做一個單獨的語句,這將是更容易和更可讀首先獲得所有文件夾列表做出來,然後讓每個文件夾內的文件列表。示例 -

import os.path 
for folder in glob.glob("./*"): 
    #Using *.zip to only get zip files 
    for path in glob.glob(os.path.join(".",folder,"*.zip")): 
     filename = os.path.split(path)[1] 
     if folder in filename: 
      #Do your logic