• python zipfile 模块基础使用及demo


    zipfile 模块相关接口 参考自这里

    # 打印该归档文件的内容
    printdir()
    
    # 从归档文件中展开一个成员到当前工作目录,memeber必须是一个完整的文件名称或者ZipInfo对象,path可以用来指定一个不同的展开目录,pwd用于加密文件的密码
    extract(memeber, path=None, pwd=None)
    
    # 从归档文件展开所有成员到当前工作目录,path和pwd参数作用同上,memebers必须是namelist()返回的list的一个子集
    extractall(path=None, members=None, pwd=None)
    
    # 返回一个与每一个归档成员对应的ZipInfo对象的列表
    infolist()
    
    # 返回归档成员名称列表
    namelist()
    
    # 返回一个包含压缩成员name相关信息的ZipInfo对象,如果name没有被包含在该压缩文档中将会引发KeyError
    getinfo(name)
    
    # 将归档文件中的一个成员作为一个file-like对象展开;name是归档文件中的文件名或者一个ZipInfo对象
    open(name, mode='r', pwd=None)
    
    # 关闭该压缩文件;退出程序前必须调用close()方法,否则一些必要记录不会被写入
    close()
    
    # 设置pwd作为展开加密文件的默认密码
    setpassword(pwd)
    
    # 读取归档文件中所有文件并检查它们的完整性,返回第一个被损坏的文件名称,或者None。对已关闭的ZipFile调用testzip()将会引发RuntimeError
    testzip()
    
    # 返回归档文件中name所指定的成员文件的字节。name是归档文件中的文件名称或一个ZipInfo对象。该归档文件必须以读(r)或追加(a)的模式打开。如果设置了pwd参数,则其将会覆盖setpassword(pwd)方法设置的默认密码。对一个已经关闭的ZipFile调用read()方法将会引发RuntimeError
    read(name, pwd=Noneds)
    
    # 将filename文件写入归档文件,可以通过arcname指定新文件名(需要注意的是文件名中磁盘盘符和开头的路径分隔符都会被移除);compress_type表示压缩方法,如果指定了该参数则会覆盖ZipFile构造方法中的compression参数指定的值;要调用此方法,归档文件必须以'w', 'a'或'x'模式打开,如果对以'r'模式打开的ZipFile调用write()方法或者对已关闭的ZipFile调用write()方法将会引发RuntimeError
    write(filename, arcname=None, compress_type=None)
    
    # 将一个字节串写入归档文件;zinfo_or_arcname可以是归档文件中的文件名称,也可以是一个ZipInfo实例
    writestr(zinfo_or_arcname, bytes[, compress_type])

    压缩zip 新手通常会有一个不太好处理的问题 就是 新手很容易 把完整的路径名写入进去

    我这里是一个 指定文件夹下 部分文件 压缩以及解压缩到指定目录Demo

    #!/usr/bin/env python
    #-*- coding: utf8 -*-
    
    import os
    import zipfile
    import shutil
    
    RECOVERY_SOMEFILES = [
    "app",
    "app_adjust",
    "app_appsflyer"
    ]
    
    MODLE_ZIP_FNAME = "android_modle1.zip"
    IGNORE_FILENAMES = [".DS_Store", ".gitignore"]
    
    def buildModelZip(recovery_some=False): 
    
    	...
    	
    	filelist = RECOVERY_SOMEFILES
    	zipf = zipfile.ZipFile(dest_path, "w")
    	try:
    		for x in xrange(0,len(filelist)):
    			tar_f = os.path.join(ROOT_PATH, filelist[x])
    			if os.path.isdir(tar_f):				
    				for tpath, folders, files in os.walk(tar_f): 
    					for filename in files:  # 遍历某一层级文件夹内所有文件
    						if filename not in IGNORE_FILENAMES:
    							new_path = tpath.replace(ROOT_PATH+os.path.sep, '') 
    							zipf.write(os.path.join(tpath, filename), os.path.join(new_path, filename))  # 向压缩文件内添加文件						
    						pass
    					pass
    
    			if os.path.isfile(tar_f):
    				new_path = tar_f.replace(ROOT_PATH+os.path.sep, '') 
    				print(new_path)
    				zipf.write(new_path, compress_type=zipfile.ZIP_DEFLATED)
    				pass
    		pass
    	except Exception as e:
    		print e
    		raise
    	finally:
    		zipf.close()
    		pass
    
    
    def extractFiles(recovery_some=False):
    	
    	...
    
    	filelist = RECOVERY_SOMEFILES
    	zipf = zipfile.ZipFile(zip_path, "r")
    	try:
    		if recovery_some:
    
    			namelist = zipf.namelist()
    			for x in xrange(0,len(namelist)):
    				for y in xrange(0,len(filelist)):
    					if (namelist[x].startswith(filelist[y])):	
    						zipf.extract(member=namelist[x], path=dest_path)
    			pass
    		else:
    			zipf.extractall(path=dest_path)
    	except Exception as e:
    		raise
    	else:
    		pass
    	finally:
    		zipf.close()
    	pass
    
    
    if __name__ == "__main__":
    	recovery_some = True
    	buildModelZip(recovery_some)
    	extractFiles(recovery_some)
    	pass
  • 相关阅读:
    HTTP压力测试工具apache的ab的使用方法
    [转]Memcached 协议中英文对照
    [转]Windows下删除.svn文件夹的最简易方法
    [转]50 个便利的 Web 设计工具
    Navicat数据存放位置和备份数据库路径设置
    Silverlight第三方控件
    MVC3.0中使用JQuery.DataTable插件。
    什么是句柄?为什么会有句柄?HANDLE
    WPF内存释放
    ArcGis for wpf 符号渲染
  • 原文地址:https://www.cnblogs.com/lesten/p/16148392.html
Copyright © 2020-2023  润新知