在Python中把一个目录(文件夹)压缩成zip或tar

商业

在Python中把整个目录(文件夹)压缩成一个zip文件时,可以使用os.scandir()或os.listdir()来创建一个文件列表,并使用zipfile模块来压缩它们,但是使用shutil模块的make_archive()更容易。

除了zip之外,也支持其他格式,如tar。

关于使用zipfile模块压缩和解压缩zip文件的更多信息,请参考以下文章。

将一个目录(文件夹)压缩成一个压缩文件:shutil.make_archive()

第一个参数,base_name,指定要创建的压缩文件的名称(不带扩展名),第二个参数,format,指定存档格式。

以下是可以选择的参数格式。

  • 'zip'
  • 'tar'
  • 'gztar'
  • 'bztar'
  • 'xztar'

第三个参数,root_dir,指定要压缩的目录的根目录的路径,第四个参数,base_dir,指定要压缩的目录相对于root_dir的路径。默认情况下,两者都被设置为当前目录。

如果省略base_dir,整个root_dir将被压缩。

data/temp
例如,假设我们有一个目录,其结构如下。

dir
├── dir_sub
   └── test_sub.txt
└── test.txt
import shutil

shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')

用上述设置省略base_dir压缩的new_shutil.zip将被解压,如下所示。

new_shutil
├── dir_sub
   └── test_sub.txt
└── test.txt

然后,如果root_dir中的目录被指定为base_dir,将显示如下。

shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')

用上述设置压缩的new_shutil_sub.zip将被解压,如下所示。

dir_sub
└── test_sub.txt
Copied title and URL