Python - Rarfile 模組



在 Python 中,**rarfile** 模組用於處理 rar 壓縮檔案(.rar 檔案)。透過使用 **rarfile** 模組,您可以獲取檔案、列出源內容,甚至直接讀取壓縮檔案中的檔案,而無需提取它們。此庫是應用程式 **unrar** 或 **rar** 的直接 Python 訪問,後者必須在命令級別安裝。

在本教程中,我們將學習 **rarfile** 模組的安裝方法、使用方法、模組提供的多種方法以及簡單的示例。

安裝 rarfile 模組

要使用 **rarfile** 模組,您必須安裝它以及 **unrar** 或 **rar** 工具,這些工具將在模組內部使用以處理 RAR 壓縮檔案。

要安裝 rarfile 模組,請使用以下命令:

pip install rarfile

安裝 WinRAR 實用程式

提取和處理 RAR 檔案需要 **WinRAR** 命令列工具。您可以從官方 WINRAR 網站下載它。下載適用於 Windows 的 **WinRAR** 並安裝。

將 **C:\Program Files\WinRAR\** 新增到系統的 **Path** 環境變數中,以啟用命令列訪問。之後,WinRAR 將可以與 Python 的 **rarfile** 模組一起使用。

rarfile 模組的方法

以下是 rarfile 模組的重要方法:

序號 方法及描述
1

rarfile.open(name, mode='r', password=None)

此方法用於讀取 RAR 壓縮檔案中的檔案,但將其寫入另一個檔案會將所有資料載入到 RAM 中。這意味著此方法將返回一個類似檔案的物件。

2

rarfile.extract(member, path=None, password=None)

此方法將 RAR 壓縮檔案中的一個原始檔提取到指定的目錄。

3

rarfile.extractall(path=None, password=None)

此方法提取所有檔案並將所有檔案儲存到引數中指定的目錄。

4

rarfile.extractall(members=None, path=None, password=None)

此方法用於將 RAR 壓縮檔案中指定的多個檔案提取到指定的目錄。如果“members”為“None”,則解壓所有檔案。

5

rarfile.infolist()

此方法返回壓縮檔案中所有檔案的“RarInfo”物件的列表,無論它們是否都描述檔案,因此,每個“RarInfo”物件都將包含對應於該檔案的詳細資訊。

6

rarfile.getinfo(name)

此方法用於查詢有關壓縮檔案的資訊,並返回一個“RarInfo”物件。

7

rarfile.namelist()

此方法實際上是一個解壓實用程式,它返回壓縮檔案中所有檔案的名稱列表。

8

rarfile.test(zipfile=None)

此方法檢查檔案或檔案中選定檔案的“健壯性”,如果未發現錯誤,則返回“True”。

9

rarfile.extractfile(name)

此方法為檔案中的給定檔案返回“類檔案”物件,允許讀取檔案內容,而無需實際從檔案中提取檔案。

10

rarfile.close()

此方法用於儲存和釋放RAR檔案及其連線的任何資源。當使用“with”語句時,此方法通常會自動呼叫,但也可以在其他時間手動呼叫。

rarfile模組示例

安裝rarfile模組和winrar後,您就可以開始在Python中使用RAR檔案。以下是一些示例:

示例1:顯示RAR檔案的內容

在此示例中,我們將看到如何在不提取的情況下列出RAR檔案中包含的所有檔案。它列印檔案中每個檔案的名稱和大小:

from rarfile import RarFile

# Path to the RAR file
file_archive = 'data_archive.rar'

# Open the RAR file
archive_instance = RarFile(file_archive)

try:
   # Process each file in the RAR archive
   for file_entry in archive_instance.infolist():
      print(f"Name: {file_entry.filename}, Size: {file_entry.file_size} bytes")
finally:
   # Ensure the file is closed properly
   archive_instance.close()

示例2:將RAR檔案中的所有檔案提取到目錄

此示例演示如何將RAR檔案中的所有檔案提取到指定的目錄。它確保在提取後正確關閉RAR檔案:

import rarfile
# Specify the path to unrar.exe
rarfile.UNRAR_TOOL = r"C:\Program Files\WinRAR\Unrar.exe"
# Path to the RAR file
rar_file_location = “text.rar"
# Directory where files will be extracted
output_directory = './extracted_files'

# Access the RAR file
rar_archive = rarfile.RarFile(rar_file_location)

try:
   # Extract all contents to the specified directory
   rar_archive.extractall(path=output_directory)
finally:
   # Close the RAR file to release system resources
   rar_archive.close()

示例3:從RAR檔案中提取單個檔案

在此示例中,我們將特定檔案從RAR檔案提取到給定目錄。程式碼在提取之前檢查檔案是否存在:

import rarfile
# Location of the RAR file
rar_file_path = 'data_archive.rar'
# Name of the file to extract
target_file = 'report.txt'
# Open the RAR file
rar_archive = rarfile.RarFile(rar_file_path)
try:
   # Extract the specific file to the target directory
   rar_archive.extract(target_file, path='./extracted_files')
finally:
   # Close the RAR file to release resources
   rar_archive.close()

示例4:直接從RAR檔案讀取檔案(無需提取)

此示例說明如何在不提取的情況下讀取RAR檔案內檔案的內容。檔案直接從檔案中開啟和讀取,並列印其內容:

import rarfile
# Location of the RAR file
compressed_file_path = 'data_archive.rar'
# File to be read from within the RAR archive
inner_file = 'notes.txt'
# Open the RAR file
rar_archive = rarfile.RarFile(compressed_file_path)
try:
   # Access and read the contents of the specified file inside the archive
   extracted_file = rar_archive.open(inner_file)
   try:
      file_content = extracted_file.read()
      print(file_content.decode('utf-8'))  # Assuming the file contains text
   finally:
      extracted_file.close()
finally:
   # Close the RAR archive
   rar_archive.close()

示例5:驗證RAR檔案中是否存在檔案

此示例演示如何檢查特定檔案是否存在於RAR檔案中。如果找到該檔案,則會顯示一條訊息指示其存在:

import rarfile

# Path to the RAR archive
rar_file_location = 'data_archive.rar'
# Name of the file to check within the archive
target_file_name = 'report.txt'

# Open the RAR archive
rar_archive = rarfile.RarFile(rar_file_location)

try:
   # Check if the file exists in the archive
   if target_file_name in rar_archive.namelist():
      print(f"'{target_file_name}' is available in the archive.")
   else:
      print(f"'{target_file_name}' was not found in the archive.")
finally:
   # Close the RAR archive
   rar_archive.close()

輸出

此示例演示如何將RAR檔案中的所有檔案提取到指定的資料夾中。(請參閱我們的示例2程式碼)

我們將Text.rar檔案檔案轉換為Folder資料夾:

Rarfile Module
python_reference.htm
廣告