python 执行rar命令 python rarfile模块 |
您所在的位置:网站首页 › window怎么解压rar文件 › python 执行rar命令 python rarfile模块 |
一、zipfile模块 包含2个Exception类: zipfile.BadZipFile和zipfile.LargeZipFile 3个类: zipfile.ZipFile(filename[, mode[, compression[, allowZip64]]])):构造zipfile对象。mode:r、w、a表示不同的打开文件方式。compression:指出这个zipfile用什么压缩方法,默认ZIP_STORED,可选ZIP_DEFLATED。allZip64:bool变量,默认True表示可以创建小于2G的zip文件。 zipfile.PyZipFile(filename[, mode[, compression[, allowZip64[, optimize]]]])):构造包含Python库文件的zipfile对象。 zipfile.ZipInfo():用于表示归档文件中的一个成员信息。zipfile.ZipInfo类的实例可以通过ZipFile对象的getinfo()和infolist()方法获取。 多个函数和方法: zipfile.is_zipfile(filename):判断filename是否是一个有效的ZIP文件,并返回一个布尔类型的值。 zipfile.ZIP_STORED:表示一个压缩归档成员 zipfile.ZIP_DEFLATED:表示普通的ZIP压缩方法,需要zlib模块的支持 zipfile.ZIP_BZIP2:表示BZIP2压缩方法,需要bz2模块的支持 zipfile.ZIP_LZMA:表示LZMA压缩方法,需要lzma模块的支持
1、zipfile.ZipFile类 构造方法: class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True) 实例方法: printdir():打印该归档文件的内容 extract(member, path = None, pwd = None):从归档文件中展开一个成员到指定目录,member必须是一个晚走的文件名称或ZipInfo对象,path指定展开的路径目录,pwd用于加密文件的密码 extractall(path = None, members = None, pwd = None):从归档文件展开所有成员到指定目录,members必须是namelist()返回的list的一个子集 infolist():返回一个与每一个归档成员对于的ZipInfo对象的列表 namelist():返回归档成员的名称列表 getinfo(name):返回一个包含压缩成员name相关信息的ZipInfo对象,如果name没有被包含在该压缩文档中,将会引发KeyError异常 open(name, mode = 'r', pwd = None):将归档文件中的一个成员作为file-like对象展开,name是归档文件中的文件名或一个ZipInfo对象 close():关闭该压缩文件,退出程序前必须调用close()方法 setpassword(ows):设置pwd作为展开加密文件的默认密码 testzip():读取归档文件中所有文件并检查它们的完整性,返回第一个被损坏的文件名称,或者None。对已关闭的ZipFile调用testzip()将会引发RuntimeError read(name, pwd = None):返回归档文件中name所指定的成员文件的字节。name是归档文件中的文件名称或一个ZipInfo对象。该归档文件必须以读(r)或追加(a)的模式打开。如果设置了pwd参数,则其将会覆盖setpassword(pwd)方法设置的默认密码。对一个已经关闭的ZipFile调用read()方法将会引发RuntimeError write(filename, arcname = None, compress_type = None):将filename文件写入归档文件,可以通过arcname指定新文件名(需要注意的是文件名中磁盘盘符和开头的路径分隔符都会被移除);compress_type表示压缩方法,如果指定了该参数则会覆盖ZipFile构造方法中的compression参数指定的值;要调用此方法,归档文件必须以'w', 'a'或'x'模式打开,如果对以'r'模式打开的ZipFile调用write()方法或者对已关闭的ZipFile调用write()方法将会引发RuntimeError writestr(zinfo_or_arcname, date, compress_type = None):将一个字节串写入归档文件;zinfo_or_arcname可以是归档文件中的文件名称,也可以是一个ZipInfo实例 以下是实例: 压缩单个文件: import zipfile import os with zipfile.ZipFile('log.zip', 'w') as z: z.write('log.log')解压文件: with zipfile.ZipFile('log.zip', 'r') as z: print(z.namelist()) # 查看压缩包中的文件列表 print(z.read(z.namelist()[0])) # 读出来压缩包中的第一个文件的内容打印到屏幕,也可保存到文件中 # z.extractall('aaa') # 解压,可设置解压路径 # z.extract('log.log') # 解压,可选择解压某个文件 z.extractall() # 解压全部压缩某个目录下所有文件: def compress_file(zipfilename, dirname): # zipfilename是压缩包名字,dirname是要打包的目录 if os.path.isfile(dirname): with zipfile.ZipFile(zipfilename, 'w') as z: z.write(dirname) else: with zipfile.ZipFile(zipfilename, 'w') as z: for root, dirs, files in os.walk(dirname): for single_file in files: if single_file != zipfilename: filepath = os.path.join(root, single_file) z.write(filepath) compress_file('a.zip', '.') #压缩当前目录下所有文件,打包成文件a.zip添加文件到zip包中: def addfile(zipfilename, dirname): if os.path.isfile(dirname): with zipfile.ZipFile(zipfilename, 'a') as z: z.write(dirname) else: with zipfile.ZipFile(zipfilename, 'a') as z: for root, dirs, files in os.walk(dirname): for single_file in files: if single_file != zipfilename: filepath = os.path.join(root, single_file) z.write(filepath) addfile('a.zip', 'test.txt')查看压缩包文件 def viewfile(zipfilename): with zipfile.ZipFile(zipfilename, 'r') as z: print(z.namelist()) viewfile('a.zip')
2、zipfile.PyZipFile类 构造方法:class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1) 比ZipFile构造函数多出一个附加参数optimize。 实例方法: 与ZipFile的实例方法一致,多了一个writepy()方法: writepy(pathname, basename='', filterfunc=None):所有*.py文件并将相应的文件添加到归档文件 optimize:默认为-1,表示这里的包含文件是一个*.pyc文件,如果需要会进行编译;0,1,2,表示只有那些同样优化等级(参考compile()函数)的文件会添加到归档压缩文件。 以下是示例: >>> zf = PyZipFile('myprog.zip') >>> def notests(s): ... fn = os.path.basename(s) ... return (not (fn == 'test' or fn.startswith('test_'))) >>> zf.writepy('myprog', filterfunc=notests)
3、zipfile.ZipInfo类 构造方法:class zipfile.ZipInfo(finame = 'NoName', date_time = (1980, 1, 1, 0, 0)) 实例属性:
二、tarfile模块 包含多个Exception类: tarfile.TarError、tarfile.ReadError、tarfile.CompressionError、tarfile.StreamError、tarfile.ExtractError、tarfile.HeaderError 2个主要类:(与zipfile一致) tarfile.TarFile:创建一个TarFile文件,提供操作一个tar归档文件的接口 tarfile.TarInfo:一个TarInfo对象表示TarFile中的一个成员。TarInfo对象中除了保存了一个文件所需要的所有属性(比如:文件类型、文件大小、修改时间、权限、属主等)之外,它还提供了一些用于判断其文件类型的方法。需要注意的是,它不包含文件的数据。TarInfo对象可以通过TarFile的getmember()、getmembers()和gettarinfo()方法获取。 方法和属性: tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs):为指定的路径名name返回一个TarFile对象 tarfile.is_tarfile(name):如果name是一个tarfile模块可以读的tar归档文件则返回True,否则返回False tarfile.ENCODING:表示默认字符编码,在windows上为'utf-8',否则为sys.getfilesystemencoding()的返回值 tarfile.USTAR_FORMAT:POSIX.1-1922(ustar)格式 tarfile.GUN_FORMAT:GUN tar格式 tarfile.PAX_FORMAT:POSIX.1-2001(pax)格式 tarfile.DEFAULT_FORMAT:表示创建归档的默认格式,当前值为GUN_FORMAT
1、tarfile.TarFile类 构造方法: class tarfile.TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors='surrogateescape', pax_headers=None, debug=0, errorlevel=0)参数说明: 下面所有的参数都是可选的,且可以作为TarFile类实例的属性被访问;name:指定归档文件路径名称;如果fileobj参数被指定该参数可以被忽略,且如果fileobj的name属性存在则取该属性的值;mode::指定文档打开模式;r:读取已存在的归档,a:向一个已存在的文件追加数据,w:创建一个新的文件覆盖已经存在的文件,x:如果文件不存在才创建一个新文件fileobj:指定要读写的文件对象;如果指定了该参数,那么mode参数的值会被fileojb的mode属性值覆盖,且name参数可以被忽略;format:用于控制归档格式;必须是这些值中的一个:USTAR_FORMAT, GUN_FORMAT, PAX_FORMATtarinfo:dereference:如果该参数值为False,则直接将软连接和硬链接添加到归档中;如果该参数值为True,则将目标文件的内容添加到归档中;ignore_zeros:该参数值对读取连续或损坏的归档时有效;如果值为False,则会把一个空block当做归档文件的结束位置;如果值为Ture,则会跳过空或无效的block并尝试获取尽可能多的归档成员debug:设置调试级别,可取值为0(不输出任何调试信息)至 3(输出所有调试信息),调试信息会被写到sys.stderr;errorlevel:设置错误级别;如果值为0,则使用TarFile.extract()方法时出现的所有错误都会被忽略,否则,如果debug可用,这些信息会作为错误信息出现在debug输出中。如果值为1,则所有fatal错误将会引发OSError;如果值为2,则所有非fatal错误将会引发TarError;encoding 和 errors:这两个参数定义了读写归档时使用的字符编码和如何处理转换错误实例方法: add(name, arcname=None, recursive=True, exclude=None, *, filter=None) addfile(tarinfo, fileobj=None) getmemeber(name) getmemebers() getnames() list(verbose=True, *, memebers=None) next() extractall(path=".", memebers=None, *, numeric_owner=False) extract(member, path="", set_attrs=True, *, numberic_owner=False) extractfile(member) gettarinfo(name=None, arcname=None, fileobj=None) close()
示例: 压缩文件 import tarfile import os with tarfile.open('a.tar', 'w') as tar: tar.add('log.log', arcname='log.log') tar.add('test.txt', arcname='test.txt')解压文件 with tarfile.open('a.tar', 'r') as tar: print(tar.getmembers()) # 查看压缩包内文件成员 # tar.extract('test.txt') # 可选择解压某个文件 # tar.extractall('ccc') # 可设置解压路径 tar.extractall() # 解压全部压缩某个目录下所有文件 def compress_file(tarfilename, dirname): # tarfilename是压缩包名字,dirname是要打包的目录 if os.path.isfile(dirname): with tarfile.open(tarfilename, 'w') as tar: tar.add(dirname) else: with tarfile.open(tarfilename, 'w') as tar: for root, dirs, files in os.walk(dirname): for single_file in files: # if single_file != tarfilename: filepath = os.path.join(root, single_file) tar.add(filepath) compress_file('test.tar', 'test.txt') compress_file('t.tar', '.')添加文件到tar包中 def addfile(tarfilename, dirname): # tarfilename是压缩包名字,dirname是要打包的目录 if os.path.isfile(dirname): with tarfile.open(tarfilename, 'a') as tar: tar.add(dirname) else: with tarfile.open(tarfilename, 'a') as tar: for root, dirs, files in os.walk(dirname): for single_file in files: # if single_file != tarfilename: filepath = os.path.join(root, single_file) tar.add(filepath) addfile('t.tar', 'ttt.txt') addfile('t.tar', 'ttt')
2、tarfile.TarInfo类 构造方法:class tarfile.TarInfo(name="") 类方法: classmethod TarInfo.frombuf(buf, encoding, errors):从字符串缓冲区创建一个TarInfo对象并返回 classmethod TarInfo.fromtarfile(tarfile):从TarFile对象中读取一个成员并将其作为TarInfo对象返回 对象方法和属性:
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |