在下面的教程中,我们将讨论 Python 编程语言的 rarfile
模块。我们将理解 rarfile
模块的不同类以及一些例子。
那么,让我们开始吧。
了解 Python rarfile
模块
Python 中的 rarfile
模块用于读取 RAR 档案。该界面尽可能像 zipfile 一样构建。
rarfile
模块的基本功能:
- 这个模块用 Python 编程语言解析档案结构。
- 它使用 Python 提取非压缩文件。
- 它还会提取使用 unrar 压缩的文件。
- 可选地,我们也可以将压缩数据写入临时文件,以加快解密速度;否则,它需要在每次执行时扫描整个归档。
现在,在我们开始使用该模块之前,让我们安装它。
如何在 Python 中安装 rarfile
模块?
为了安装 rarfile 模块,我们将使用 pip 安装程序执行如下所示的命令:
语法:
$ pip3 install rarfile
为了验证模块安装是否正确,我们可以创建一个新文件,并添加 import 语句,看看它是否返回任何错误。
文件:验证. py
import rarfile
现在,保存 Python 文件,并使用命令提示符运行执行命令:
语法:
$ python verify.py
如果上面的 Python 文件没有引起任何导入错误,我们就可以进入脸书信使机器人构建程序了。但是,如果它确实引发了异常,建议重新安装该模块并参考其官方文档。
现在,让我们了解一下 rarfile 模块的基础知识。
rarfile
模块的类
rarfile 模块提供了多个类,我们可以根据需要使用。这些类别是:
- RarFile 类
- RarInfo 级
- 罕见的 ExtFile 类
- nsdatetime 类
我们将简要讨论这些课程。
理解 RarFile 类
rarfile 模块的 RarFile 类用于解析 RAR 结构,提供对档案中文件的访问。
执行 RarFile 类的语法如下所示:
语法:
class rarfile.RarFile(file, mode='r', charset=None, info_callback=None, crc_check=True, errors='stop', part_only=False)
RarFile 类的一些方法和属性如下所示:
1.=无
此属性用于陈述存档注释。该值可以是 Unicode 字符串或无。
2.文件名 =无
此属性用于提供文件名(如果有)。该值可以是 Unicode 字符串或无。
3._ 输入 _()
此方法用于打开上下文。
4. 退出 ( 类型、值、追溯)
此方法用于退出上下文。
5.iter()
此方法用于迭代成员。
6. 设置密码 ( pwd )
此方法用于设置提取过程中使用的密码。
7.需要 _ 密码()
如果任何归档条目需要密码来提取,此方法返回 True。
8.名称列表()
此方法返回一个包含存档文件名称的列表。
9.信息列表()
该方法返回归档文件中所有文件/目录的 RarInfo 对象。
10.volumelist()
此方法返回归档卷的文件名。
如果归档文件只有一个卷,则列表由主归档文件的名称组成。
11. getinfo( 名称)
此方法为文件返回 RarInfo。
12.打开(名称,模式= 'r' , pwd =无)
此方法返回可从中读取数据的类似文件的对象(稀疏文件)。
该对象实现 io。RawIOBase 接口,所以我们可以用 io 进一步包装它。BufferReader 和 io.TextIOWrapper。
在 Python 的早期版本中,io 模块不可用,它只实现了 read()、seek()、tell()和 close()方法。
该对象是可搜索的,尽管只对未压缩的文件进行快速搜索。在压缩文件中,通过提前读取和重新开始解压缩来实现查找。
参数:
- 名称-这个参数是一个文件的名称或者一个 RarInfo 的实例。
- 模式-该参数是打开文件的模式。它必须是“r”。
- pwd -该参数包括用于提取的密码。
13.read( 名称, pwd = None )
此方法返回归档条目的未压缩数据。
对于较大的文件,建议使用 open()方法。
参数:
- 名称-这个参数是一个文件的名称或者一个 RarInfo 的实例。
- pwd -该参数包括用于提取的密码。
14.关闭()
此方法用于释放开放资源。
15.printdir( 文件=无)
此方法用于将归档文件中的文件列表打印到 stdout 或给定的文件。
16.摘录(成员,路径=无, pwd =无)
此方法用于将单个文件提取到当前目录中。
参数:
- 成员-此参数是文件的名称或 RarInfo 的实例。
- 路径-这是一个可选参数,包括目标路径。
- 这是另一个可选参数,包括要使用的密码。
17.抽取(路径=无,成员=无, pwd =无)
此方法用于将所有文件提取到当前目录中。
参数:
- 路径-这是一个可选参数,包括目标路径。
- 成员-这是另一个可选参数,包括文件的名称或 RarInfo 的实例。
- 这是另一个可选参数,包括要使用的密码。
18.测试( pwd = None
该方法用于读取所有文件和测试循环冗余校验。
19 . strerror()
如果解析失败,此方法返回错误字符串;如果没有发生异常,则返回无。
理解 raminfo 类
rarfile 模块的 RarInfo 类被用作 RAR 档案中的一个条目。
作为日期时间的时间戳在 RAR3 中没有时区,而在 RAR5 归档中有 UTC 时区
执行类的语法如下所示:
语法:
class rarfile.RarInfo
类的一些方法和属性如下所示:
1.文件名
该属性包含带有相对路径的文件名。此属性的值始终是一个 Unicode 字符串,指定路径,用路径分隔符“/”分隔。
2.日期时间
该属性由文件修改的时间戳组成。它可以用作(年、月、日、小时、分钟、秒)的元组。RAR5 允许在丢失的地方存档,那么它就是无。
3.评论
该属性包括可选的文件注释字段。该值由 Unicode 字符串组成。(仅限 RAR3)
4.文件大小
此属性用于指定未压缩的大小。
5.压缩大小
此属性用于指定压缩大小。
6.压缩类型
此属性用于指定压缩方法:RAR_M0、…、RAR_M5 常量之一。
7.提取版本
该属性包含解压缩所需的 RAR 的最小版本。As(大调*10 +小调),所以 2.9 就是 29。
RAR3: 10,20,29
RAR5 在档案中没有这样的字段,它被设置为 50。
8. host_os
此属性指定主机操作系统类型,这是 RAR 操作系统常量之一。
RAR3: RAR_OS_WIN32,RAR_OS_UNIX,RAR_OS_MSDOS,RAR_OS_OS2,RAR_OS_BEOS
RAR5: RAR_OS_WIN32,RAR_OS_UNIX
9.方式
该属性用于指定文件属性。它可能是 dos 风格的,也可能是 unix 风格的,这取决于 host_os。
10. mtime
该属性用于指定文件修改的时间。该值可以与 date_time 属性相同;但是,作为具有扩展精度的 datetime 对象。
11.阿蒂米
该属性是指定创建时间的可选时间字段。它还充当日期时间对象。
12.访问时间
该属性也是一个可选的时间字段,用于指定上次访问的时间。它还充当日期时间对象。
13.arctime(北极时间)
该属性也是指定存档时间的可选时间字段。它还充当日期时间对象。(仅限 RAR3)
14.循环冗余检验
该属性用于指定未压缩文件的 CRC-32。该属性的值是一个无符号整数。
RAR5:可能是无。
15.blake2sp_hash
此属性用于指定解压缩数据的 Blake2SP 哈希。(仅限 RAR5)
16.卷
此属性用于指定从 0 开始的卷 nr。
17.卷文件
此属性用于指定文件开始的卷文件名。
18. file_redir
该属性由(类型、标志、目标)的元组组成。(仅限 RAR5)。如果不是“无”,则该文件是某种链接。(仅限 RAR5)
类型是常量之一:
- RAR5_XREDIR_UNIX_SYMLINK: Unix simpleink
- rar 5 xrdir windows _ symlink:windows symlink
- RAR5 XREDIR WINDOWS _ JUNCTION:WINDOWS JUNCTION
- RAR5_XREDIR_HARD_LINK:到目标的硬链接
- 当前文件是另一个归档条目的副本
标志可能包含位:
- RAR5_XREDIR_ISDIR: Symlink 指向一个目录
19. is_dir()
如果条目是目录,此方法用于返回真。
4.0 版新增。
20.is_symlink()
如果条目是符号链接,则此方法用于返回真。
4.0 版新增。
21.is_file()
如果条目是普通文件,则使用此方法返回 True。
4.0 版新增。
22.需要 _ 密码()
如果数据受密码保护存储,此方法用于返回 True。
23. 地下()
如果条目是目录,此方法用于返回真。
自 4.0 版以来已弃用。
理解稀有文件类
rarfile 模块的稀疏文件类作为对象的基类工作,类似于 RarFile.open() 返回的文件。
基础:我。拉维巴斯
稀疏文件类的语法如下所示:
语法:
class rarfile.RarExtFile
这个类提供公共方法和常见的循环冗余校验
行为:
- 没有短读- 读(),并且读 info() 按照要求读。
- 没有内部缓冲区;为此,我们必须使用buffere reader。
稀有文件类的一些属性和方法如下所示:
1.名称 =无
此属性用于指定归档条目的文件名
2.读取( n=-1 )
此方法用于从归档条目中读取全部或指定数量的数据。
3.关闭()
此方法用于关闭打开的资源。
4.再入( buf
此方法用于定义直接读入缓冲区的零拷贝。它返回读取的字节。
5.tell()
此方法返回未压缩数据中的当前读取位置。
6.寻道(偏移,由此= 0 )
此方法用于查找数据。在未压缩的文件中,查找是通过实际查找来完成的,因此速度很快。在压缩文件中,向前搜索是缓慢的,通过向前读取,向后通过从头开始重新打开和解压缩。
7.可读()
此方法返回真
8.可写()
此方法返回 False,因为不支持写入。
9.可查找()
该方法返回真,因为支持查找,尽管在压缩文件上速度很慢。
10. readall()
此方法用于读取所有剩余数据
11. 文件()
此方法返回基础文件描述符(如果存在)。如果 IO 对象不使用文件描述符,则会引发 OSError。
12.isatty()
如果这是“交互式”流,则此方法返回。如果无法确定,它也会返回 False。
13. 读取行()
此方法用于从流中读取并返回一行。对于二进制文件,行结束符总是 b 'n 对于文本文件,我们可以使用 newlines 参数打开,以便选择可识别的行结束符。如果给定大小,将最多读取大小字节。
14.读取线()
此方法用于从流中返回一个行列表。我们可以指定控制读取行数的提示:如果到目前为止所有行的总大小(以字节/字符为单位)超过提示,将不再读取行。
了解 nsdatetime 类
rarfile 模块的 nsdatetime 类表示携带纳秒的 datetime。此类不支持算术,将丢失纳秒。
基地: 日期时间.日期时间
4.0 版新增
nsdatetime 类的语法如下所示:
语法:
class rarfile.nsdatetime
nsdatetime 类的一些属性和方法如下所示:
1.十亿分之一秒
该属性由从 0 到 999999999 的纳秒数组成。
2.等值格式(sep = 'T ',timespec = ' auto ')
默认情况下,此方法用于以纳秒精度格式化。
3.像散区(tz =无)
此方法用于转换到新时区。
4.替换(年=无,月=无,日=无,小时=无,分=无,秒=无,微秒=无, tzinfo =无, ** ,折=无,纳秒=无*)
此方法用于返回新的时间戳,并替换给定的字段。
rarfile
模块的功能
模块的一些功能如下:
| 南号码 | 功能 | 描述 | | one | rarfile.israrfile(x 文件) | 此功能用于检查文件是否是 RAR 档案。 | | Two | rarfile . is rarfile _ sfx(xfile)** | 此功能用于检查文件是否是支持 SFX 的 RAR 档案。 它会从文件中读取 2M。 |
rarfile
模块的常数
模块的一些常量如下
| 南号码 | 常数 | 描述 | | one | 稀有档案。RAR_M0 = 48 | 这个常数表示没有压缩。 | | Two | 稀有档案。RAR_M1 = 49 | 该常数表示压缩级别- m1,最快压缩。 | | three | 稀有档案。RAR_M2 = 50 | 该常数代表压缩级别- m2。 | | four | 稀有档案。RAR_M3 = 51 | 该常数代表压缩级别- m3。 | | five | 稀有档案。RAR_M4 = 52 | 该常数代表压缩级别 m4。 | | six | 稀有档案。RARM5 = 53 | 该常数代表压缩级别- m5,也是最大压缩。 | | seven | 稀有档案。rar OS win32 = 2 | 这个常数代表操作系统的类型,即视窗。 | | eight | 稀有档案。rar OS UNIX = 3 | 该常量代表操作系统的类型,即 UNIX。 | | nine | 稀有档案。rar OS macos = 4 | 该常量代表操作系统的类型,即 MacOS(仅在 RAR3 中)。 | | Ten | 稀有档案。rar OS beos = 5 | 该常数代表操作系统的类型,即 BeOS(仅在 RAR3 中)。 | | Eleven | 稀有档案。rar OS OS 2 = 1 | 这个常量代表操作系统的类型,即 OS2(仅在 RAR3 中)。 | | Twelve | 稀有档案。rar OS _ msdos = 0** | 该常量代表操作系统的类型,即 MS-DOS(仅在 RAR3 中)。 |
rar 文件模块的警告和异常
rarfile
模块的一些警告和异常如下:
| 南号码 | 警告和异常 | 描述 | | one | 类 rarfile。取消支持降低 | 当归档文件使用 rarfile
模块不支持的功能时,会出现此警告。 4.0 版新增。 | | Two | 类 rarfile。错误 | 这个异常是 rarfile 错误的基类。 | | three | 类珍品。BadRarFile | 当归档中存在不正确的数据时,会引发此异常。 | | four | class rarfile .我们的档案 | 当文件不是 RAR 归档文件时,会引发此异常。 | | five | 类 rarfile。巴德拉尔名称 | 当系统无法猜测多部分名称组件时,会引发此异常。 | | six | 类珍品。北美防空司令部〔t1〕 | 当在 RAR 找不到文件时,会引发此异常。 | | seven | 类 rarfile。密码要求 | 当文件需要密码时,会引发此异常。 | | eight | 类 rarfile。NeedFirstVolume(msg,volume) | 当我们必须从第一卷开始时,这个异常就出现了。 | | nine | 类 rarfile。NoCrypto | 当我们无法解析加密的标头时会引发此异常-没有可用的加密。 | | Ten | 类 rarfile.RarExecError | 当问题由 unrar 报告时,会引发此异常。 | | Eleven | 类珍品。难得警告〔t1〕 | 当出现非致命错误时,会引发此异常。 | | Twelve | 类 rarfile.RarFatalError | 当出现致命错误时,会引发此异常。 | | Thirteen | 类珍品。rarcrcerror〔t1〕 | 当解包过程中出现循环冗余校验错误时,会引发此异常。 | | Fourteen | class rarfile . rarlockedarchive error | 当我们试图修改锁定的归档文件时,会引发此异常。 | | Fifteen | 类珍品。RarWriteError | 当我们尝试编写 RAR 文件时,会引发此异常。 | | Sixteen | 类 rarfile。RarOpenError | 当我们尝试打开 RAR 文件时,会引发此异常。 | | Seventeen | 类 rarfile.RarUserError | 此异常代表用户错误。 | | Eighteen | 类珍品。记忆错误〔t1〕 | 此异常表示内存错误。 | | Nineteen | 类珍品。RarCreateError | 此异常表示创建错误。 | | Twenty | 类 rarfile。rarnofilesterror | 当没有找到与模式匹配的文件时,会引发此异常。 | | Twenty-one | 类 rarfile。RarUserBreak | 当用户停止时,会引发此异常。 | | Twenty-two | 类珍品。RarWrongPassword | 此异常会引发不正确的密码。 | | Twenty-three | 类珍品。rarunnowerror〔t1〕 | 此异常表示未知的退出代码。 | | Twenty-four | 类珍品。罕见信号出口〔t1〕 | 当解开程序发出信号退出时,会引发此异常。 | | Twenty-five | 类珍品。rarcannotexecd〔t1〕 | 当找不到可执行文件时,会引发此异常。 |
rarfile
模块的工作
现在让我们考虑以下演示 rarfile 模块工作的示例。
示例:
# importing the required module
import rarfile
# using the RarFile class
myRarFile = rarfile.RarFile("myfolder.rar")
# iterating through the files in the archive
for file in myRarFile.infolist():
# printing the filenames and file sizes
print(file.filename, file.file_size)
# checking the readme file
if file.filename == "myfolder/readme.txt":
# reading the file
print(myRarFile.read(file))
输出:
myfolder/helloWorld.py 101
myfolder/image.jpg 281466
myfolder/readme.txt 49
b'Hello Python learners!\r\nWelcome to Javatpoint.com'
myfolder/ 0
说明:
在上面的代码片段中,我们已经导入了所需的模块。然后我们使用 RarFile 类来选择 RAR 档案。然后,我们使用的循环来遍历存档中的文件,并打印文件名及其大小。然后,我们使用 if 条件语句来检查 RAR 档案是否包含 readme.txt 文件。最后,我们使用 read() 方法读取了文件。