我得到了一些以字节为单位的tar数据,并希望在不将其写入文件系统的情况下读取它。
将其写入文件系统是可行的:
with open('out.tar', 'wb') as f:
f.write(data)然后,在shell中:tar -xzvf out.tar
但会出现以下错误:
import tarfile
tarfile.open(data, 'r')
'''
File ".../lib/python3.7/tarfile.py", line 1591, in open
return func(name, filemode, fileobj, **kwargs)
File ".../lib/python3.7/tarfile.py", line 1638, in gzopen
fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj)
File ".../lib/python3.7/gzip.py", line 163, in __init__
fileobj = self.myfileobj = builtins.open(fil
'''读取内存中的tar的正确方法是什么?
更新
以下是工作原理:
from io import BytesIO
tarfile.open(fileobj=BytesIO(data), 'r')为什么?
tarfile.open应该能够处理字节。我自己将字节转换为一个类似文件的对象,然后告诉tarfile.open使用这个类似文件的对象是可行的,但是为什么需要这种转换呢?基于字节的原始API什么时候有效,什么时候无效?
发布于 2020-10-28 21:05:09
你可以使用tarfile,从那里你可以使用字节流读取数据。
import tarfile
with tarfile.open(fileobj = BytesIO(your_file_name)) as tar:
for tar_file in tar:
if (tar_file.isfile()):
inner_data = tar.extractfile(tar_file).read().decode('utf-8')https://stackoverflow.com/questions/64570709
复制相似问题