TarFileをディスクに書き込んで再度開くことなく、tarデータを含むバッファーを使用してメモリ内にTarFileオブジェクトを作成することは可能ですか?ソケットを介して送信されたバイトを取得します。
このようなもの:
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)
注:これを行う理由の1つは、最終的に複数のスレッドで同時にこれを実行できるようにしたいため、2つのスレッドが同時に実行しようとすると、一時ファイルの使用がオーバーライドされる可能性があるためです。
助けてくれてありがとう!
IOモジュール からのBytesIO()は、まさに必要なことを実行します。
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)
確かに、このようなもの:
import io
io_bytes = io.BytesIO(byte_array)
tar = tarfile.open(fileobj=io_bytes, mode='r')
(tarファイルの形式に合うようにmode
を調整します。たとえば、 `mode = 'r:gz'など)