Python标准库之zipfile和tarfile模块的使用攻略
简介
压缩文件在网页和文件传输中是很常见的,很多时候我们需要用到Python对压缩文件的操作。Python标准库中提供了两个模块zipfile和tarfile,可以用来读取、写入、解压缩、压缩zip、tar和其他常见的压缩格式文件。
本篇攻略将介绍zipfile和tarfile模块的使用方法,包括它们的常用的方法和实际应用的示例。
zipfile模块
zipfile模块提供了一种在Python中管理zip文件(存档,或存档文件)的方式。它使用标准的zip文件格式。使用zipfile模块可以:
- 向zip文件添加文件或文件夹
- 从zip文件中提取文件或文件夹
- 列出zip文件中的文件
- 读取zip文件中的文件的内容
- 在zip文件中删除文件或文件夹
ZipFile打开和关闭
打开压缩文件并返回ZipFile对象,可以使用以下语法:
import zipfile
with zipfile.ZipFile("example.zip", "r") as zip_file:
# operations to do with zip file
zipfile.ZipFile 接收两个参数:
- zipfile 必须指定待打开的压缩文件名或文件对象。
- mode 是可选的字符串参数。它指定zip在打开文件时的模式。默认模式是"r",表示打开zip文件,以便读取其内容。
使用with语句来确保文件在使用完成后被关闭。
ZipFile增加和提取文件
要向zip文件中添加文件或文件夹,请使用 write() 方法。此方法接收文件名或目录名,注意:目录名是将添加目录下的所有文件。例如:
with zipfile.ZipFile("example.zip", "w") as zip_file:
zip_file.write("file1.txt")
zip_file.write("directory1")
在上面的代码示例中,使用了"example.zip"打开zip文件,然后使用 write() 方法,添加了一个 file1.txt 文件和一个名为 directory1 的文件夹。
要从zip文件中提取文件或文件夹,请使用 extract() 方法。此方法接受文件名或目录名作为参数。例如:
with zipfile.ZipFile("example.zip", "r") as zip_file:
zip_file.extract("file1.txt")
zip_file.extract("directory1")
在上面的代码示例中,使用"example.zip"打开zip文件,然后使用 extract() 方法,从zip文件中提取出了一个 file1.txt 文件和一个名为 directory1 的文件夹。
ZipFile列表
要列出zip文件中的所有文件,请使用 namelist() 方法。例如:
with zipfile.ZipFile("example.zip", "r") as zip_file:
files_list = zip_file.namelist()
print(files_list)
在上面的代码示例中,使用"example.zip"打开zip文件,使用 namelist() 方法获取压缩文件中的所有文件,然后打印出来。
ZipFile读取文件内容
要在zip文件中读取文件的内容,请使用 open() 方法。此方法接收文件名和模式作为参数。这里的模式与Python内置的"open()"方法中的模式相同。例如:
with zipfile.ZipFile("example.zip", "r") as zip_file:
with zip_file.open("file1.txt", "r") as file:
print(file.read().decode("utf-8"))
在上面的代码示例中,使用 "example.zip" 打开zip文件,使用 open() 方法读取文件1.txt中的内容,然后打印出来。
ZipFile删除文件
要从zip文件中删除文件,请使用 remove() 方法。此方法接收文件名作为参数。例如:
with zipfile.ZipFile("example.zip", "w") as zip_file:
zip_file.write("file1.txt")
zip_file.write("file2.txt")
with zipfile.ZipFile("example.zip", "a") as zip_file:
zip_file.remove("file2.txt")
在上面的代码示例中,首先使用 "example.zip" 打开zip文件,使用 write() 方法添加了两个文件。然后,使用 remove() 方法,从zip文件中删除了一个文件。最后,使用 append 打开zip文件,并且删除的文件不再在zip文件中。
tarfile模块
tarfile模块提供了一种在Python中管理 tar存档文件的方式。它使用标准的tar文件格式。使用tarfile模块可以:
- 创建tar文件
- 向tar文件添加文件或文件夹
- 从tar文件中提取文件或文件夹
- 列出tar文件中的文件
- 读取tar文件中的文件的内容
- 在tar文件中删除文件或文件夹
tarfile打开和关闭
打开一个 tar 文件并返回一个 TarFile 对象的方法与 zipfile.ZipFile 相似,只是操作的文件类型不同。可以使用以下语法:
import tarfile
with tarfile.open("example.tar", "r") as tar_file:
# operations to do with tar file
tarfile.open 接收两个参数:
- tarfile 必须指定待打开的tar文件名或文件对象。
- mode 是可选的字符串参数。它指定tar在打开文件时的模式。默认模式是 "r" ,它表示打开 tar 文件,以便读取其内容。
使用with语句来确保文件在使用完成后被关闭。
tarfile增加和提取文件
要将文件或文件夹添加到 tar 文件中,请使用 add()
方法:
with tarfile.open("example.tar", "w") as tar_file:
tar_file.add("file1.txt")
tar_file.add("directory1")
在上面的代码示例中,使用 "example.tar" 打开 tar 文件,然后使用 add()
方法,添加了一个 file1.txt 文件和一个名为 directory1 的文件夹。
要从 tar 文件中提取文件或文件夹,请使用 extract()
方法。
with tarfile.open("example.tar", "r") as tar_file:
tar_file.extract("file1.txt")
tar_file.extract("directory1")
在上面的代码示例中,使用 "example.tar" 打开 tar 文件,然后使用 extract()
方法,从 tar 文件中提取出了一个 file1.txt 文件和一个名为 directory1 的文件夹。
tarfile列表
要列出tar文件中的所有文件,请使用 getnames() 方法。例如:
with tarfile.open("example.tar", "r") as tar_file:
files_list = tar_file.getnames()
print(files_list)
在上面的代码示例中,使用 "example.tar" 打开tar文件,使用 getnames() 方法获取tar文件中的所有文件,然后打印出来。
tarfile读取文件内容
要在tar文件中读取文件的内容,请使用 extractfile() 方法。此方法接收文件名作为参数。例如:
with tarfile.open("example.tar", "r") as tar_file:
with tar_file.extractfile("file1.txt") as file:
print(file.read().decode("utf-8"))
在上面的代码示例中,使用 "example.tar" 打开tar文件,使用 extractfile() 方法读取文件1.txt中的内容,然后打印出来。
tarfile删除文件
要从tar文件中删除文件,请使用 remove() 方法。此方法接收文件名作为参数。例如:
with tarfile.open("example.tar", "w") as tar_file:
tar_file.add("file1.txt")
tar_file.add("file2.txt")
with tarfile.open("example.tar", "a") as tar_file:
tar_file.remove("file2.txt")
在上面的代码示例中,首先使用 "example.tar" 打开tar文件,使用 add()
方法添加了两个文件。然后,使用 remove()
方法,从tar文件中删除了一个文件。最后,使用 append
打开tar文件,并且删除的文件不再在tar文件中。
示例
示例一:将文件夹压缩成zip文件
下面是一个示例,将当前工作目录下的文件夹 test 压缩成 test.zip 文件:
import zipfile
import os
def zip_dir(dirname, zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
print arcname
zf.write(tar, arcname)
zf.close()
zip_dir("test","test.zip")
示例二:将文件夹压缩成tar文件
下面是一个示例,将当前工作目录下的文件夹 test 压缩成 test.tar文件:
import tarfile
import os
def make_tarfile(output_filename, source_dir):
with tarfile.open(output_filename, "w:gz") as tar:
tar.add(source_dir, arcname=os.path.basename(source_dir))
make_tarfile("test.tar", "test")
小结
以上介绍了zipfile和tarfile模块的使用方法,这两个模块都是Python标准库的一部分,所以不需要额外安装。在实际应用中,可以按需使用这些模块,处理压缩文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python标准库之zipfile和tarfile模块的使用 - Python技术站