如何在Python 3中从字节缓冲区构造内存中的TarFile对象?
是否可以使用包含tar数据的缓冲区在内存中创建TarFile对象,而不必将TarFile写入磁盘并再次打开它?我们通过套接字发送字节 大概是这样的:如何在Python 3中从字节缓冲区构造内存中的TarFile对象?,python,file,python-3.x,tar,tarfile,Python,File,Python 3.x,Tar,Tarfile,是否可以使用包含tar数据的缓冲区在内存中创建TarFile对象,而不必将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
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)
import io
io_bytes = io.BytesIO(byte_array)
tar = tarfile.open(fileobj=io_bytes, mode='r')
注意:这样做的原因之一是,我们最终希望能够同时使用多个线程执行此操作,因此,如果两个线程试图同时执行此操作,则可能会覆盖使用临时文件
谢谢你的帮助 当然,是这样的:
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)
import io
io_bytes = io.BytesIO(byte_array)
tar = tarfile.open(fileobj=io_bytes, mode='r')
(调整mode
以适合tar文件的格式,例如可能的'mode='r:gz'等)BytesIO()from正好满足您的需要
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)
可能必须添加模式,具体取决于您正在执行的操作(在存档中存档)tarfile.open(fileobj=byte_stream,mode='r:gz')^。我使用了
fileobj=file\u like\u object
,而不是mode=
,只是给出了一个无效的pythonx0模式(它们都是位置参数,但是文档显示“filename”,“r:gz”
——如果你使用的是内存中的东西,你需要显式地fileobj=…,mode=…
!