Python压缩文件
1. 介绍
文件压缩在日常计算机使用中经常用到,可以将文件或文件夹压缩成一个或多个压缩文件。而在Python中,我们可以利用内置的模块来实现文件的压缩和解压缩功能。本文将详细介绍Python中如何使用压缩文件。
2. 压缩文件的原理
压缩文件的原理是利用一些算法,将文件中重复的内容进行压缩存储,从而减小文件的大小。常见的压缩算法有LZ77、LZ78、Huffman编码等。这些算法能够将文件的冗余数据进行有效的处理,从而实现文件压缩的效果。
3. Python压缩文件的模块
Python中提供了多个用于文件压缩的模块,如zipfile
、tarfile
等。这些模块可以方便地实现对文件进行压缩和解压缩操作。下面我们将分别介绍这些模块的使用方法。
3.1 zipfile
模块
zipfile
模块可以用来创建、读取和写入ZIP格式的压缩文件。它提供了多个类和方法,可以完成对ZIP文件的操作。
3.1.1 创建ZIP文件
我们可以使用ZipFile
类的构造函数来创建一个ZIP文件。
import zipfile
zip_name = "example.zip"
zip_obj = zipfile.ZipFile(zip_name, "w")
在上述代码中,我们使用zipfile.ZipFile
创建了一个名为example.zip
的ZIP文件,并将其赋值给zip_obj
对象。其中,第一个参数为ZIP文件的名称,第二个参数"w"
表示我们要创建一个新的ZIP文件。
3.1.2 添加文件到ZIP文件
要将文件添加到ZIP文件中,我们可以使用write
方法。
zip_obj.write("file1.txt")
在上述代码中,我们将名为file1.txt
的文件添加到了ZIP文件中。我们可以连续调用write
方法来添加多个文件。
3.1.3 添加文件夹到ZIP文件
除了单个文件,我们还可以将整个文件夹添加到ZIP文件中。首先,我们需要遍历文件夹中的所有文件和子文件夹,然后逐个添加到ZIP文件中。
import os
folder_path = "example_folder"
for folder_name, subfolders, filenames in os.walk(folder_path):
for filename in filenames:
file_path = os.path.join(folder_name, filename)
zip_obj.write(file_path)
在上述代码中,我们首先使用os.walk
方法遍历了example_folder
文件夹下的所有文件和子文件夹。然后,使用os.path.join
方法将文件夹名称和文件名称拼接为完整的路径,最后通过write
方法将文件添加到ZIP文件中。
3.1.4 关闭ZIP文件
在完成对ZIP文件的操作后,我们需要调用close
方法来关闭ZIP文件。
zip_obj.close()
3.1.5 完整示例代码
import zipfile
def create_zip():
zip_name = "example.zip"
zip_obj = zipfile.ZipFile(zip_name, "w")
zip_obj.write("file1.txt")
folder_path = "example_folder"
for folder_name, subfolders, filenames in os.walk(folder_path):
for filename in filenames:
file_path = os.path.join(folder_name, filename)
zip_obj.write(file_path)
zip_obj.close()
create_zip()
上述代码首先创建了一个名为example.zip
的ZIP文件,并将文件file1.txt
和文件夹example_folder
下的所有文件添加到了ZIP文件中。
3.2 tarfile
模块
tarfile
模块可以用来创建、读取和写入TAR格式的压缩文件。类似于zipfile
模块,tarfile
模块也提供了多个类和方法,可以完成对TAR文件的操作。
3.2.1 创建TAR文件
我们可以使用TarFile
类的构造函数来创建一个TAR文件。
import tarfile
tar_name = "example.tar"
tar_obj = tarfile.open(tar_name, "w")
在上述代码中,我们使用tarfile.open
创建了一个名为example.tar
的TAR文件,并将其赋值给tar_obj
对象。
3.2.2 添加文件到TAR文件
要将文件添加到TAR文件中,我们可以使用add
方法。
tar_obj.add("file1.txt")
在上述代码中,我们将名为file1.txt
的文件添加到了TAR文件中。与ZIP文件不同,TAR文件可以自动保存文件的相对路径。
3.2.3 添加文件夹到TAR文件
类似于ZIP文件,我们也可以将整个文件夹添加到TAR文件中。
import os
folder_path = "example_folder"
tar_obj.add(folder_path)
在上述代码中,我们将example_folder
文件夹添加到了TAR文件中。
3.2.4 关闭TAR文件
和ZIP文件一样,完成对TAR文件的操作后,我们需要调用close
方法来关闭TAR文件。
tar_obj.close()
3.2.5 完整示例代码
import tarfile
def create_tar():
tar_name = "example.tar"
tar_obj = tarfile.open(tar_name, "w")
tar_obj.add("file1.txt")
folder_path = "example_folder"
tar_obj.add(folder_path)
tar_obj.close()
create_tar()
上述代码首先创建了一个名为example.tar
的TAR文件,并将文件file1.txt
和文件夹example_folder
添加到了TAR文件中。
4. 解压缩文件
除了创建压缩文件,我们还需要学习如何解压缩已有的压缩文件。下面我们将分别介绍如何解压缩ZIP和TAR文件。
4.1 解压缩ZIP文件
要解压缩ZIP文件,我们可以使用unzip
方法。
import zipfile
zip_name = "example.zip"
zip_obj = zipfile.ZipFile(zip_name, "r")
zip_obj.extractall()
zip_obj.close()
在上述代码中,我们首先使用zipfile.ZipFile
打开了名为example.zip
的ZIP文件。然后,使用extractall
方法将ZIP文件中的所有内容解压缩。最后,我们调用close
方法关闭ZIP文件。
4.2 解压缩TAR文件
要解压缩TAR文件,我们可以使用extractall
方法。
import tarfile
tar_name = "example.tar"
tar_obj = tarfile.open(tar_name, "r")
tar_obj.extractall()
tar_obj.close()
在上述代码中,我们首先使用tarfile.open
打开了名为example.tar
的TAR文件。然后,使用extractall
方法将TAR文件中的所有内容解压缩到当前目录下。最后,我们调用close
方法关闭TAR文件。
5. 总结
本文详细介绍了在Python中如何使用内置的zipfile
和tarfile
模块来实现文件的压缩和解压缩操作。通过使用这些模块,我们可以轻松地创建ZIP或TAR格式的压缩文件,并对其进行操作。同时,我们也学习了如何将文件和文件夹添加到压缩文件中,以及如何从压缩文件中解压缩出文件。