如何使用python(2.5版)压缩文件夹的内容?

如何使用python(2.5版)压缩文件夹的内容?,python,file,zip,python-2.5,Python,File,Zip,Python 2.5,一旦我在一个特定的文件夹中拥有了我需要的所有文件,我希望我的python脚本能够压缩文件夹内容 这可能吗 我该怎么做呢?这是一个递归版本 def zipfolder(path, relname, archive): paths = os.listdir(path) for p in paths: p1 = os.path.join(path, p) p2 = os.path.join(relname, p) if os.path.

一旦我在一个特定的文件夹中拥有了我需要的所有文件,我希望我的python脚本能够压缩文件夹内容

这可能吗


我该怎么做呢?

这是一个递归版本

def zipfolder(path, relname, archive):
    paths = os.listdir(path)
    for p in paths:
        p1 = os.path.join(path, p) 
        p2 = os.path.join(relname, p)
        if os.path.isdir(p1): 
            zipfolder(p1, p2, archive)
        else:
            archive.write(p1, p2) 

def create_zip(path, relname, archname):
    archive = zipfile.ZipFile(archname, "w", zipfile.ZIP_DEFLATED)
    if os.path.isdir(path):
        zipfolder(path, relname, archive)
    else:
        archive.write(path, relname)
    archive.close()
is的改编版本:

例如:

C:\zipdir> python -mzipdir c:\tmp\test test.zip

它使用“C:\tmp\test”目录的内容创建“C:\zipdir\test.zip”存档文件。

在Python2.7上,您可以使用:

基本名称存档名称减去扩展名

档案的格式

要压缩的根目录

比如说

 shutil.make_archive(target_file, format="bztar", root_dir=compress_me)    

zfn=absfn[lenbasedir+lenos.sep:]为什么不absbasedir=os.path.abspathbasedir;os.path.relpathabsfn,absbasedir?此外,basedir和os.sep的长度可以看作是常量,因此它应该在两个for循环之外。以前从未听说过,但它使with语句向后兼容2.5。以前我遇到过错误。。。来自未来的[声明];,因为有些stdlib函数在2.5中不支持,即使语句本身与导入一起工作,但在2.7中支持它。我想这可以通过关闭来避免。我使用了此解决方案,但不得不修改以下行:zfn=absfn[lenbasedir+lenos.sep:]并将其减至以下位置:zfn=absfn[lenbasedir+lenos.sep-1:],否则文件名将丢失letter@jfosoriot1-这是Python 2.5代码。试试shutil.make_归档。2-规范化basedir是否以路径分隔符斜杠结尾:如果lenbasedir>1:basedir=basedir.rstripos.sept对于现代Python,答案是
 shutil.make_archive(target_file, format="bztar", root_dir=compress_me)