Python压缩与解压缩

在日常开发中,我们经常会遇到需要压缩和解压缩文件的需求。Python作为一门强大的编程语言,也提供了相应的库来处理这些操作。本文将介绍如何使用Python进行文件的压缩和解压缩,并提供代码示例。

文件压缩

Python的标准库中提供了tarfile模块,可以用于创建和解压tar文件。tar文件是一种常见的文件归档格式,可以将多个文件合并成一个文件。下面是一个示例代码,用于创建一个tar文件并将多个文件添加到其中:

import tarfile

def create_tarfile(file_list, output_file):
    with tarfile.open(output_file, "w") as tar:
        for file in file_list:
            tar.add(file)
    
file_list = ["file1.txt", "file2.py", "file3.png"]
output_file = "archive.tar"
create_tarfile(file_list, output_file)

在上述代码中,我们首先导入了tarfile模块,然后定义了一个create_tarfile函数。该函数接受一个文件列表和输出文件名作为参数,使用tarfile.open创建一个tar文件,并使用tar.add方法将文件逐个添加到tar文件中。最后,我们将文件列表["file1.txt", "file2.py", "file3.png"]打包成一个名为archive.tar的tar文件。

文件解压缩

使用Python进行文件解压缩同样可以使用tarfile模块进行操作。下面是一个示例代码,用于解压缩一个tar文件:

import tarfile

def extract_tarfile(file_name, output_dir):
    with tarfile.open(file_name, "r") as tar:
        tar.extractall(output_dir)
    
file_name = "archive.tar"
output_dir = "output"
extract_tarfile(file_name, output_dir)

在上述代码中,我们定义了一个extract_tarfile函数,该函数接受一个tar文件名和输出目录作为参数。使用tarfile.open打开tar文件,并使用tar.extractall将文件解压缩到指定的输出目录中。这里我们将tar文件archive.tar解压缩到名为output的目录中。

文件压缩与解压缩的应用

文件压缩和解压缩在实际应用中有着广泛的用途。例如,在网络传输中,压缩文件可以减少数据传输的大小,提高传输效率。下面是一个示例代码,演示如何使用Python进行网络传输中的文件压缩与解压缩:

import tarfile
import socket
import os

def send_tarfile(file_name, host, port):
    with tarfile.open(file_name, "w") as tar:
        tar.add(file_name)
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        with open(file_name, "rb") as f:
            data = f.read()
            s.sendall(data)
    
    os.remove(file_name)
    
def receive_tarfile(file_name, host, port):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((host, port))
        s.listen(1)
        conn, addr = s.accept()
        with open(file_name, "wb") as f:
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                f.write(data)
    
    with tarfile.open(file_name, "r") as tar:
        tar.extractall()
    
    os.remove(file_name)
    
# 发送端
file_name = "file.txt"
host = "localhost"
port = 12345
send_tarfile(file_name, host, port)

# 接收端
file_name = "file.txt"
host = "localhost"
port = 12345
receive_tarfile(file_name, host, port)

在上述代码中,我们首先定义了一个send_tarfile函数和一个receive_tarfile函数,分别用于发送端和接收端。发送端通过创建tar文件并将其发送给接收端,接收端接收tar文件并解压缩到当前目录。这里我们使用了Python的socket模块来模拟网络传输。

通过以上代码示例,我们可以看到,Python提供了简洁而强大的库来处理文件的压缩