Python中的文件压缩和解压函数
Python为文件压缩和解压提供了几个模块,最常用的有zipfile和tarfile模块。zipfile模块用于zip格式文件的读取和写入,tarfile模块用于tar格式文件的读取和写入,这两个模块可以完成对文件的压缩和解压操作。下面将详细介绍这两个模块的使用方法。
1. zipfile模块
1.1 压缩文件
使用zipfile模块的ZipFile类可以对文件进行压缩操作。创建ZipFile对象时需要指定压缩文件名和操作模式,模式可以是'w'表示新建、'a'表示追加、'r'表示只读。下面是一个简单的示例。
import zipfile
# 创建ZipFile对象,打开文件(如果文件不存在则创建)
zf = zipfile.ZipFile('example.zip', 'w')
# 添加文件到压缩包
zf.write('file1.txt')
zf.write('file2.txt')
# 关闭文件
zf.close()
上面的代码中,创建了一个ZipFile对象,然后向其中添加了两个文件,最后关闭文件。
除了直接添加文件,还可以使用write()方法向压缩包中添加数据,write()方法的参数可以是文件名或者字节串。
import zipfile
zf = zipfile.ZipFile('example.zip', 'w')
# 向压缩包中添加文件内容,需要指定文件名和数据
zf.writestr('file3.txt', 'This is file3')
zf.writestr('file4.txt', b'This is file4')
zf.close()
1.2 解压文件
使用ZipFile对象的extractall()方法可以解压整个文件到指定目录。如果只需要解压其中一个文件可以使用extract()方法。下面是一个解压全部文件的示例。
import zipfile
# 创建ZipFile对象,打开文件
zf = zipfile.ZipFile('example.zip', 'r')
# 解压文件到指定目录
zf.extractall('output')
# 关闭文件
zf.close()
在上面的示例中,创建了一个ZipFile对象,然后使用extractall()方法将所有文件解压到output目录下,最后关闭文件。
2. tarfile模块
2.1 压缩文件
使用tarfile模块的TarFile类可以对文件进行压缩操作。创建TarFile对象时需要指定文件名和操作模式,模式可以是'w'表示新建、'a'表示追加、'r'表示只读。下面是一个简单的示例。
import tarfile
# 创建TarFile对象,打开文件(如果文件不存在则创建)
tf = tarfile.open('example.tar', 'w')
# 添加文件到压缩包
tf.add('file1.txt')
tf.add('file2.txt')
# 关闭文件
tf.close()
上面的代码中,创建了一个TarFile对象,然后向其中添加了两个文件,最后关闭文件。
除了直接添加文件,还可以使用addfile()方法向压缩包中添加数据,addfile()方法的参数可以是TarInfo对象或者文件名,TarInfo对象包含了文件的元信息。
import tarfile
tf = tarfile.open('example.tar', 'w')
# 添加文件内容到压缩包中,需要指定文件名、数据和元信息
tf.addfile(tarfile.TarInfo('file3.txt'), 'This is file3')
tf.addfile(tarfile.TarInfo('file4.txt'), b'This is file4')
tf.close()
2.2 解压文件
使用TarFile对象的extractall()方法可以解压整个文件到指定目录。如果只需要解压其中一个文件可以使用extract()方法。下面是一个解压全部文件的示例。
import tarfile
# 创建TarFile对象,打开文件
tf = tarfile.open('example.tar', 'r')
# 解压文件到指定目录
tf.extractall('output')
# 关闭文件
tf.close()
在上面的示例中,创建了一个TarFile对象,然后使用extractall()方法将所有文件解压到output目录下,最后关闭文件。
总结
Python的zipfile和tarfile模块提供了对文件的压缩和解压操作。使用ZipFile类和TarFile类可以分别对zip和tar格式的文件进行读写操作,并提供了多种操作方法来满足不同的需求。这些模块的使用方法都比较简单,需要注意文件名和操作模式的选择,以及添加文件时需要指定文件名或者TarInfo对象。
