是否可以使用包含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 = tar.extractfile(member)
    print(f)

注意:这样做的原因之一是,我们最终希望能够同时对多个线程执行此操作,因此如果两个线程试图同时执行此操作,则可能会覆盖使用临时文件.

谢谢你的帮助!

推荐答案

IO module中的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)

Python-3.x相关问答推荐

如何翻转以列形式给出的日期间隔并提取多个重叠时段内每小时的音量?

Pandas :从元组字典创建数据帧

丢弃重复的索引,并在多索引数据帧中保留一个

无法使用Python发送带有参数和标头的POST请求

msg-seviri l1.5本机文件

CDKTF ec2 具有特定私有 IP 地址的娱乐

aiogram机器人中处理文本输入异常而不是按钮点击的回调函数.

Pandas groupby 然后 for each 组添加新行

如何将 OLS 趋势线添加到使用 updatemenus 显示数据子集的 plotly 散点图图形对象?

安装没有 sudo 权限的 python3 和 pip3

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

正则表达式:匹配字符串中的分隔符(字母和特殊字符)以形成新的子字符串

非拉丁字符的Python正则表达式不起作用

魔术8球txt文件列表

multiprocessing.Queue 中的 ctx 参数

如何使用请求发送带有标头的 PATCH 请求

Windows 下 Python 3.x 的 OpenCV

字典理解中的操作顺序

print(... sep='', '\t' ) 是什么意思?

在 Meta 中创建具有动态模型的通用序列化程序