是否有可能直接在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
答案 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)