python 执行rar命令 python rarfile模块

您所在的位置:网站首页 window怎么解压rar文件 python 执行rar命令 python rarfile模块

python 执行rar命令 python rarfile模块

2023-07-11 11:16| 来源: 网络整理| 查看: 265

一、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))

实例属性:

python 执行rar命令 python rarfile模块_压缩包

 

 

二、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对象返回

对象方法和属性:

python 执行rar命令 python rarfile模块_压缩包_02

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3