如何构建从字节缓冲存储器tar文件对象在Python 3?(How to construct a T

2019-08-20 02:44发布

是否有可能,而无需将tar文件写入到磁盘,然后再次打开它来创建在使用含有焦油数据的缓冲存储器一个tar文件对象? 我们得到通过socket发送的字节数。

事情是这样的:

import tarfile
byte_array = client.read_bytes()
tar = tarfile.open(byte_array) # how to do this?
# use "tar" as a regular TarFile object
for member in tar.getmembers():
    f = tar.extractfile(member)
    print(f)

注:原因做这一块是我们最终希望能够与多个线程同时要做到这一点,因此,使用临时文件可能会被重写,如果两个线程试图在同一时间做这件事。

谢谢你的任何及所有的帮助!

Answer 1:

BytesIO()从IO模块不正是你所需要的。

import tarfile, io
byte_array = client.read_bytes()
file_like_object = io.BytesIO(byte_array)
tar = tarfile.open(fileobj=file_like_object)
# use "tar" as a regular TarFile object
for member in tar.getmembers():
    f = tar.extractfile(member)
    print(f)


Answer 2:

当然,这样的事情:

import io

io_bytes = io.BytesIO(byte_array)

tar = tarfile.open(fileobj=io_bytes, mode='r')

(调整mode ,以适应你tar文件的格式,例如,可能`模式=“R:GZ”等)



文章来源: How to construct a TarFile object in memory from byte buffer in Python 3?