Python 如何将多个文件对象序列化到一个文件中?

Python 如何将多个文件对象序列化到一个文件中?,python,python-2.7,pygame,Python,Python 2.7,Pygame,我目前的任务是解决如何在单个文件中高效地打包图像和文本的难题。在这样做时,我需要使文件相对较小(它不应该比图像文件的大小大很多),并且访问和保存信息的过程应该相对较快 现在,我已经找到了一种有效的方法——使用pygame将图像转换为字符串,将其(以及我需要的文本)存储在python对象中,然后对对象进行pickle。这很好,但是文件最终比图像大得多,因为它没有被压缩。因此,为了帮助实现这一点,我使用gzip压缩了pickle对象。现在我又遇到了另一个问题——整个过程有点太慢了,因为我一次需要处理

我目前的任务是解决如何在单个文件中高效地打包图像和文本的难题。在这样做时,我需要使文件相对较小(它不应该比图像文件的大小大很多),并且访问和保存信息的过程应该相对较快

现在,我已经找到了一种有效的方法——使用pygame将图像转换为字符串,将其(以及我需要的文本)存储在python对象中,然后对对象进行pickle。这很好,但是文件最终比图像大得多,因为它没有被压缩。因此,为了帮助实现这一点,我使用gzip压缩了pickle对象。现在我又遇到了另一个问题——整个过程有点太慢了,因为我一次需要处理数百个这样的文件,这可能需要几分钟(加载单个文件的时间不应该超过1/2秒,而这种方法每个文件最多需要2秒)

我有一个想法,将两个独立的文件放在一个文件中,就像使用.zip的人一样,但不需要进一步压缩数据。只要图像保持原始的压缩格式(在本例中为.png),简单地用一些文本存储它的数据理论上应该既快速又不会占用太多内存。问题是,我不知道该怎么做


有什么想法吗?

亚历克斯·雷诺兹使用tar存档的想法似乎是完美的搭配。

研究类似于
tar
tar
的存档方法。创建一个新文件,首先将压缩的图像文件数据复制到其中,然后紧接着连接文本,然后在最后,在一个固定大小的块上加上一个唯一标识符加上图像文件的长度。要读回这样的文件,首先查找文件末尾减去固定大小块的大小,读入固定大小的数据量,验证唯一id是否存在,然后使用读取图像文件数据部分后存储的图像文件长度(或跳过它并读取其后的文本部分).你为什么关心新文件是否更大?硬盘空间几乎是免费的…文件必须通过网络传输到多个客户端。如果您的格式是jpeg read about EXIF标记,则很可能您的图像格式已经具有一些元数据功能。