Python:解压缩目录树中的选定文件

时间:2017-08-17 10:41:12

标签: python unzip directory-tree

我有以下目录,在父目录中有几个文件夹让我们说ABCD,并且在每个文件夹中有许多拉链显示名称,并且名称中包含父文件夹的字母以及其他信息:

-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等以将它们包含在文件将被解压缩的路径中。因此,在父目录中创建解压缩的文件夹。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您拥有的代码似乎工作正常,您只需确保不覆盖变量名称并使用正确的名称。以下代码对我来说非常适合

{{1}}

答案 1 :(得分: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