【问题标题】:How to decompress zip files across a Windows folder in Python如何在 Python 中跨 Windows 文件夹解压缩 zip 文件
【发布时间】:2015-02-28 08:33:33
【问题描述】:

我有一个包含 900 多个子文件夹的大文件夹,每个子文件夹中都有另一个文件夹,其中又有一个压缩文件。 就像 -
-我的文件夹
-----我的子文件夹
---------我的子子文件夹
-------------MyFile.zip
如何使用 Python 解压缩各自文件夹中或 Windows 其他地方的单独文件夹中的所有压缩文件?

任何帮助都会很棒!

【问题讨论】:

  • 看看this answerthis one,均由 Martijn Pieters 提供。
  • 非常感谢!但是如何递归解压缩不同位置的数百个文件?有什么想法吗?
  • 您可以使用os.path.walk() 递归遍历一个目录。另见os.listdir()os.path 模块具有许多用于处理文件和目录的有用函数,例如 .isfile(path).isdir(path).splitext(path)

标签: python windows zip compression


【解决方案1】:

你可以试试这样的:

import zipfile,os;
def unzip(source_filename, dest_dir):
    with zipfile.ZipFile(source_filename) as zf:
        for member in zf.infolist():
            extract_allowed = True;
            path = dest_dir;
            words = member.filename.split('/');
            for word in words:
                if (word == '..'):
                    extract_allowed = False;
                    break;
            if (extract_allowed == True):
                zf.extract(member, dest_dir);
def unzipFiles(dest_dir):
    for file in os.listdir(dest_dir):
        if (os.path.isdir(dest_dir + '/' + file)):
            return unzipFiles(dest_dir + '/' + file);
        if file.endswith(".zip"):
            print 'Found file: "' + file + '" in "' + dest_dir + '" - extracting';
            unzip(dest_dir + '/' + file, dest_dir + '/');
unzipFiles('./MyFolder');

【讨论】:

  • 非常感谢!你能说出“ if (word == '..') ”的作用吗?
  • @RakeshTripathi 这是检查压缩存档中是否应该有任何相对路径,以避免从给定路径(dest_dir)中提取文件。在您的情况下,它可能不是问题。
最近更新 更多