转换 bytes to file-like object

来源:互联网 发布:梦里花落知多少的小说 编辑:程序博客网 时间:2024/05/21 10:49

引入:很多时候我们的一些函数的输入是file对象,然而我们现在能拿到的仅仅是文件的字节数组。则我们需要将bytes转换为文件这么一个过程。

 

一个现实的例子就是。Python的自带zip库zipfile可以对zip文件进行解压,压缩的工作。现在我想用ZipFile来处理我的zip包,有些特别的是这个zip包里面仍是一个个更小的zip包。 由于某种原因,对于每一个内部的小zip包进入打开操作ZipFile.open()返回的file-like对象有问题。这种返回的file-like对象被认为是不合法的zip文件。

为了绕过这个问题,我们只有通过使用ZipFile的read()方法读取小zip的字节数据。再而使用一种方法将此字节数据转换成file-like对象。这里我使用的是io.BytesIO库。

 

def __init__( self, filePath ):        self.zf = ZipFile( filePath, "r", compression = zipfile.ZIP_DEFLATED )        self.zfinforlist = self.zf.infolist()        def getNext( self ):        readBytes = self.zf.read( self.zfinforlist[self.index] )        fileBytes = BytesIO( readBytes )        zf2 = ZipFile( fileBytes )        fileName = zf2.namelist()[0]        zf2.read( fileName )

通过 fileBytes = BytesIO( readBytes ) 以及 zf2 = ZipFile( fileBytes )。我成功的将字节转换成为了file-like对象。且此对象呗认为是合法的zip文件。
原创粉丝点击