如何使用 Python 创建完整压缩的 tar 文件?
如何在 Python 中创建压缩的 .tar.gz 文件?
How can I create a .tar.gz file with compression in Python?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何在 Python 中创建压缩的 .tar.gz 文件?
How can I create a .tar.gz file with compression in Python?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(11)
为整个目录树构建
.tar.gz
(又名.tgz
):这将创建一个 gzip 压缩的 tar 存档,其中包含同名的单个顶级文件夹内容为
source_dir
。To build a
.tar.gz
(aka.tgz
) for an entire directory tree:This will create a gzipped tar archive containing a single top-level folder with the same name and contents as
source_dir
.如果要创建 tar.bz2 压缩文件,只需将文件扩展名替换为“.tar.bz2”,将“w:gz”替换为“w:bz2”即可。
If you want to create a tar.bz2 compressed file, just replace file extension name with ".tar.bz2" and "w:gz" with "w:bz2".
您可以使用
mode='w:gz 调用 tarfile.open '
,意思是“打开 gzip 压缩写入。”您可能希望以
.tar.gz
结尾文件名(open
的name
参数),但这不会影响压缩能力。顺便说一句,您通常可以使用
'w:bz2'
模式获得更好的压缩效果,就像tar
通常可以使用bzip2
进行比它更好的压缩一样可以使用gzip
进行压缩。You call tarfile.open with
mode='w:gz'
, meaning "Open for gzip compressed writing."You'll probably want to end the filename (the
name
argument toopen
) with.tar.gz
, but that doesn't affect compression abilities.BTW, you usually get better compression with a mode of
'w:bz2'
, just liketar
can usually compress even better withbzip2
than it can compress withgzip
.之前的答案建议使用
tarfile
Python 模块在 Python 中创建.tar.gz
文件。这显然是一个很好的 Python 风格的解决方案,但它在归档速度方面存在严重缺陷。 这个问题提到tarfile
大约是两倍比 Linux 中的tar
实用程序慢。根据我的经验,这个估计是相当正确的。因此,为了更快地归档,您可以通过
subprocess
模块使用tar
命令:Previous answers advise using the
tarfile
Python module for creating a.tar.gz
file in Python. That's obviously a good and Python-style solution, but it has serious drawback in speed of the archiving. This question mentions thattarfile
is approximately two times slower than thetar
utility in Linux. According to my experience this estimation is pretty correct.So for faster archiving you can use the
tar
command usingsubprocess
module:shutil.make_archive 对于文件和目录都非常方便(内容递归添加到存档中):
shutil.make_archive is very convenient for both files and directories (contents recursively added to the archive):
除了 @Aleksandr Tukallo 的答案之外,您还可以获得输出和错误消息(如果发生)。 以下答案很好地解释了使用
tar
压缩文件夹。In addition to @Aleksandr Tukallo's answer, you could also obtain the output and error message (if occurs). Compressing a folder using
tar
is explained pretty well on the following answer.在这个
tar.gz 文件压缩在打开的视图目录中
在解决方案中使用 os.path.basename(file_directory)
其在目录中的 tar.gz 文件压缩中的使用
In this
tar.gz file compress in open view directory
In solve use os.path.basename(file_directory)
its use in tar.gz file compress in directory
对 @THAVASI.T 的答案进行了小修正,其中省略了显示“tarfile”库的导入,并且没有定义第三行中使用的“tar”对象。
Minor correction to @THAVASI.T's answer which omits showing the import of the 'tarfile' library, and does not define the 'tar' object which is used in the third line.
我使用它来生成 tar.gz 文件,而不包含主文件夹。
I am using this to generate tar.gz file without containing the main folder.
只是重述@George V. Reilly的出色答案,但以更清晰的形式...
正如@Brōtsyorfuzthrāx指出的(但以另一种方式)如果你留下“add”方法的第二个参数,那么它会给你整个路径tar 文件中
fd_path + fl_name
的结构。当然,
如果你不想使用或者没有将文件夹路径和文件名分开,你可以使用... ...。
谢谢!
Just restating @George V. Reilly 's excellent answer, but in a clearer form...
As @Brōtsyorfuzthrāx pointed out (but in another way) if you leave the "add" method second argument then it'll give you the entire path structure of
fd_path + fl_name
in the tar file.Of course you can use...
... if you don't want to use or don't have the folder path and file name separated.
Thanks!????
最佳性能并且压缩文件中没有
.
和..
! 请参阅下面的漏洞警告:cwd 参数在压缩之前更改目录 - 这解决了点的问题。
shell=True
允许使用通配符 (*
)best performance and without the
.
and..
in compressed file! See vulnerability warning below:the
cwd
argument changes directory before compressing - which solves the issue with the dots.the
shell=True
allows wildcard usage (*
)