ZIP文件夹与python中的子文件夹

时间:2012-05-07 09:12:02

标签: python zip

我需要使用python压缩包含.xml文件和.fgdb文件的文件夹。谁能帮助我?我尝试了一些我在互联网上找到的脚本,但总有一些技术问题(比如创建一个空的zip文件,或创建zip文件我无法打开'没有权限'等等。)

提前致谢。

3 个答案:

答案 0 :(得分:12)

使其工作的关键是os.walk()函数。这是我过去组装的一个应该有效的脚本。如果您有任何例外,请告诉我。

import zipfile
import os
import sys

def zipfolder(foldername, target_dir):            
    zipobj = zipfile.ZipFile(foldername + '.zip', 'w', zipfile.ZIP_DEFLATED)
    rootlen = len(target_dir) + 1
    for base, dirs, files in os.walk(target_dir):
        for file in files:
            fn = os.path.join(base, file)
            zipobj.write(fn, fn[rootlen:])

zipfolder('thenameofthezipfile', 'thedirectorytobezipped') #insert your variables here
sys.exit()

答案 1 :(得分:0)

This answer很有帮助,但花了我一点时间才完全了解rootlen的用途。本示例使用一些较长的变量名来帮助教导此处的实际情况。还包括一个验证zip文件正确的块。

import os
import zipfile

src_path = os.path.join('/', 'some', 'src', 'path')
archive_name = 'myZipFile.zip'
archive_path = os.path.join('/', 'some', 'path', archive_name)

with zipfile.ZipFile(archive_path, 'w', zipfile.ZIP_DEFLATED) as archive_file:
    for dirpath, dirnames, filenames in os.walk(src_path):
        for filename in filenames:
            file_path = os.path.join(dirpath, filename)
            archive_file_path = os.path.relpath(file_path, src_path)
            archive_file.write(file_path, archive_file_path)

with zipfile.ZipFile(archive_path, 'r') as archive_file:
    bad_file = zipfile.ZipFile.testzip(archive_file)

    if bad_file:
        raise zipfile.BadZipFile(
            'CRC check failed for {} with file {}'.format(archive_path, bad_file))

答案 2 :(得分:0)

如果有人想在你的项目中使用一些通用函数

def zip_compression_tree(root_path, zip_name):
with zipfile.ZipFile(zip_name, 'w') as z:
    for root, dirs, files in os.walk(root):
        for file in files:
            z.write(os.path.join(root, file))
        for directory in dirs:
            z.write(os.path.join(root, directory))