如何使用python(2.5版)压缩文件夹的内容?
一旦我在一个特定的文件夹中拥有了我需要的所有文件,我希望我的python脚本能够压缩文件夹内容 这可能吗如何使用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.
我该怎么做呢?这是一个递归版本
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)