Question

Is it possible to create a TarFile object in memory using a buffer containing the tar data without having to write the TarFile to disk and open it up again? We get the bytes sent over a socket.

Something like this:

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)

Note: one of the reasons for doing this is that we eventually want to be able to do this with multiple threads simultaneously, so using a temp file might be overridden if two threads try to do it at the same time.

Thank you for any and all help!

Was it helpful?

Solution

BytesIO() from IO module does exactly what you need.

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)

OTHER TIPS

Sure, something like this:

import io

io_bytes = io.BytesIO(byte_array)

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

(Adjust mode to fit the format of your tar file, e.g. possibly `mode='r:gz', etc.)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top