Geo*_*lly 156
要为整个目录树构建.tar.gz(aka .tgz):
import tarfile
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))
Run Code Online (Sandbox Code Playgroud)
CNB*_*orn 84
import tarfile
tar = tarfile.open("sample.tar.gz", "w:gz")
for name in ["file1", "file2", "file3"]:
tar.add(name)
tar.close()
Run Code Online (Sandbox Code Playgroud)
如果要创建tar.bz2压缩文件,只需将文件扩展名替换为".tar.bz2",将"w:gz"替换为"w:bz2".
Ale*_*lli 30
你叫tarfile.open用mode='w:gz',意为"开放的gzip压缩的写作."
您可能希望结束文件名(name参数open).tar.gz,但这不会影响压缩能力.
顺便说一句,你平时用的模式得到更好的压缩'w:bz2',就像tar平时甚至可以更好地压缩bzip2比它可以压缩gzip.
小智 7
Shutil.make_archive对于文件和目录都非常方便(内容递归添加到存档中):
import shutil
compressed_file = shutil.make_archive(
base_name='archive', # archive file name w/o extension
format='gztar', # available formats: zip, gztar, bztar, xztar, tar
root_dir='path/to/dir' # directory to compress
)
Run Code Online (Sandbox Code Playgroud)
先前的答案建议使用tarfilePython模块.tar.gz在Python中创建文件。这显然是一个不错的Python风格的解决方案,但是它在归档速度方面存在严重缺陷。这个问题提到它tarfile比tarLinux中的实用程序慢大约两倍。根据我的经验,这一估计是非常正确的。
因此,为了加快归档速度,可以使用tarusing subprocess模块命令:
subprocess.call(['tar', '-czf', output_filename, file_to_archive])
Run Code Online (Sandbox Code Playgroud)