如何使用Python3解压缩内存中的数据? 更新

问题描述

我有一些以字节为单位的tar数据,并且希望在不将其写入文件系统的情况下读取它。

将其写入文件系统可以正常工作

with open('out.tar','wb') as f:
     f.write(data)

然后,在外壳中: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什么时候起作用,什么时候不起作用?

解决方法

您可以使用tarfile,然后可以从其中使用Byte流读取数据。

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')