Open source 如何使用7z DLL压缩并将许多小块数据附加到文件中

Open source 如何使用7z DLL压缩并将许多小块数据附加到文件中,open-source,compression,7zip,Open Source,Compression,7zip,我想使用7z DLL将少量数据附加到一个压缩文件中。目前,我的最佳猜测是解压缩7z文件,附加数据,然后重新压缩。显然,如果7z文件的大小变大(比如1GB),并且我希望每秒保存一个新的块,那么从性能角度来看,这不是一个好的解决方案。我怎样才能做得更好 我可以使用7z DLL支持的任何压缩格式 这不是我的答案 我认为这是一条路要走 下面的ctypes示例来自我编写的实际代码(在Python 2.5中)。到目前为止,这是我找到的做你要求的事情的最简单的方法 import ctypes # Load

我想使用7z DLL将少量数据附加到一个压缩文件中。目前,我的最佳猜测是解压缩7z文件,附加数据,然后重新压缩。显然,如果7z文件的大小变大(比如1GB),并且我希望每秒保存一个新的块,那么从性能角度来看,这不是一个好的解决方案。我怎样才能做得更好


我可以使用7z DLL支持的任何压缩格式

这不是我的答案

我认为这是一条路要走

下面的ctypes示例来自我编写的实际代码(在Python 2.5中)。到目前为止,这是我找到的做你要求的事情的最简单的方法

import ctypes

# Load DLL into memory.

hllDll = ctypes.WinDLL ("c:\\PComm\\ehlapi32.dll")

# Set up prototype and parameters for the desired function call.
# HLLAPI

hllApiProto = ctypes.WINFUNCTYPE (ctypes.c_int,ctypes.c_void_p,
    ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p)
hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3",0), (1, "p4",0),

# Actually map the call ("HLLAPI(...)") to a Python name.

hllApi = hllApiProto (("HLLAPI", hllDll), hllApiParams)

# This is how you can actually call the DLL function.
# Set up the variables and call the Python name with them.

p1 = ctypes.c_int (1)
p2 = ctypes.c_char_p (sessionVar)
p3 = ctypes.c_int (1)
p4 = ctypes.c_int (0)
hllApi (ctypes.byref (p1), p2, ctypes.byref (p3), ctypes.byref (p4))
ctypes包含所有C类型的数据类型(int、char、short、void*、…),可以通过值或引用进行传递。它还可以返回特定的数据类型,尽管我的示例没有这样做(HLL API通过修改通过引用传递的变量来返回值)。

看看(LZMA是7z的压缩算法名称),您应该在没有ctypes的情况下做您想做的事情

编辑

有待确认,但快速浏览一下,就会发现只支持读取7z文件,而不支持写入。但是在src dir中有一个
pylzma_compressfile.c
,所以可能需要做些什么

编辑2


pylzma.compressfile函数似乎就在那里,很好。

@Jakob Bowyer:请将您的答案作为答案发布,这样我们就可以对其进行投票并进行适当的评论。它更像是一个指针,而不是一个答案,但这是肯定的。它必须是一个7z文件,或者任何类型的压缩都可以工作吗?Python还有内置的
zipfile
库,可以对ZIP文件执行类似的操作。它可以是任何压缩格式。因此,如何将许多小块数据压缩到单个文件中,而不必每次重新压缩整个文件?