首页 > 编程知识 正文

Python 中的 rarfile模块

时间:2023-11-26 13:13:30 阅读:309456 作者:VNEK

在下面的教程中,我们将讨论 Python 编程语言的 rarfile模块。我们将理解 rarfile模块的不同类以及一些例子。

那么,让我们开始吧。

了解 Python rarfile模块

Python 中的 rarfile模块用于读取 RAR 档案。该界面尽可能像 zipfile 一样构建。

rarfile模块的基本功能:

  1. 这个模块用 Python 编程语言解析档案结构。
  2. 它使用 Python 提取非压缩文件。
  3. 它还会提取使用 unrar 压缩的文件。
  4. 可选地,我们也可以将压缩数据写入临时文件,以加快解密速度;否则,它需要在每次执行时扫描整个归档。

现在,在我们开始使用该模块之前,让我们安装它。

如何在 Python 中安装 rarfile模块?

为了安装 rarfile 模块,我们将使用 pip 安装程序执行如下所示的命令:

语法:


$ pip3 install rarfile

为了验证模块安装是否正确,我们可以创建一个新文件,并添加 import 语句,看看它是否返回任何错误。

文件:验证. py


import rarfile

现在,保存 Python 文件,并使用命令提示符运行执行命令:

语法:


$ python verify.py

如果上面的 Python 文件没有引起任何导入错误,我们就可以进入脸书信使机器人构建程序了。但是,如果它确实引发了异常,建议重新安装该模块并参考其官方文档。

现在,让我们了解一下 rarfile 模块的基础知识。

rarfile模块的类

rarfile 模块提供了多个类,我们可以根据需要使用。这些类别是:

  1. RarFile 类
  2. RarInfo 级
  3. 罕见的 ExtFile 类
  4. 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 =无)

此方法用于将所有文件提取到当前目录中。

参数:

  1. 路径-这是一个可选参数,包括目标路径。
  2. 成员-这是另一个可选参数,包括文件的名称或 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

这个类提供公共方法和常见的循环冗余校验

行为:

  1. 没有短读- 读(),并且读 info() 按照要求读。
  2. 没有内部缓冲区;为此,我们必须使用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!rnWelcome to Javatpoint.com'
myfolder/ 0

说明:

在上面的代码片段中,我们已经导入了所需的模块。然后我们使用 RarFile 类来选择 RAR 档案。然后,我们使用的循环来遍历存档中的文件,并打印文件名及其大小。然后,我们使用 if 条件语句来检查 RAR 档案是否包含 readme.txt 文件。最后,我们使用 read() 方法读取了文件。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。