python tarred文件夹流

时间:2012-11-26 11:14:11

标签: python stream tar

有没有办法来tar文件夹并获得tar tar流而不是tarred文件? 我曾尝试使用tar模块,但它直接返回tarred文件。

with tarfile.open("zipped.tar",'w|') as tar:
    for base_root, subFolders, files in os.walk('test'):
            for j in files:
                filepath = os.path.join(base_root,j)
                if os.path.isfile(filepath):
                    with open(filepath, 'rb') as file:
                        size = os.stat(filepath).st_size
                        info = tarfile.TarInfo()
                        info.size = size
                        info.name = filepath
                        if(size <= chunck_size):
                            data = file.read(info.size)
                            fobj = StringIO.StringIO(data)
                            tar.addfile(info, fobj)
                        else:
                            data = ""
                            while True:
                                temp_data = file.read(chunck_size)
                                if temp_data == '':
                                    break
                                data = data + temp_data
                            fobj = StringIO.StringIO(data)
                            tar.addfile(info, fobj) 

2 个答案:

答案 0 :(得分:1)

根据the documentationopen可以采用fileobj参数:

  

如果指定了fileobj,则将其用作以二进制模式为name打开的文件对象的替代方法。它应该在0位置。

所以你可以写这个,然后使用缓冲对象。

import io
buffer = io.BytesIO()
with tarfile.open("zipped.tar",'w|', fileobj=buffer) as tar:

答案 1 :(得分:0)

如果我正确阅读了您的问题,您应该在Stackoverflow上找到答案here