将文件添加到tar存档而不先保存它

时间:2016-06-01 11:43:35

标签: python python-3.x tar

是否有可能直接在tar存档中创建文件?
上下文:我有一个方法可以创建某种类型的内容作为String。我想将此内容保存为tar存档中的文件。我是否必须创建tmp文件,或者是否有可能直接在tar存档中创建文件。

def save_files_to_tar(tarname):
    archive = tarfile.open(tarname, mode='w')
    for _ in range(some_number):
        content = get_content()
        # HERE add content to tar

2 个答案:

答案 0 :(得分:4)

我认为您应该使用StringIO来创建内存对象之类的文件,并使用tarInfo来描述假文件,如下所示:

import StringIO
import tarfile

archive = tarfile.open(tarname, mode='w')
for _ in range(some_number):
    content = get_content()
    s = StringIO.StringIO()
    s.write(content)
    s.seek(0)
    tarinfo = tarfile.TarInfo(name="my filename")
    tarinfo.size = len(s.buf)
    archive.addfile(tarinfo=tarinfo, fileobj=s)

archive.close()

希望这有帮助。

答案 1 :(得分:0)

使用上下文管理器与Python 2和3兼容的解决方案:

from __future__ import unicode_literals

import tarfile
import time
from contextlib import closing
from io import BytesIO

message = 'Lorem ipsum dolor sit amet.'
filename = 'test.txt'

with tarfile.open('test.tar', 'w') as tf:
    with closing(BytesIO(message.encode())) as fobj:
        tarinfo = tarfile.TarInfo(filename)
        tarinfo.size = len(fobj.getvalue())
        tarinfo.mtime = time.time()
        tf.addfile(tarinfo, fileobj=fobj)