1

7z DLL を使用して、少量のデータを 1 つの圧縮ファイルに追加したいと考えています。現時点では、7z ファイルを解凍し、データを追加して、再圧縮することをお勧めします。明らかに、7z ファイルのサイズが大きくなり (1 GB など)、毎秒新しいチャンクを保存したい場合、これはパフォーマンスの面で優れたソリューションではありません。どうすればこれをより良い方法で行うことができますか?

7z DLL でサポートされている任意の圧縮形式を使用できます。

4

2 に答える 2

2

Python LZMAバインディング(LZMAは7zの圧縮アルゴリズム名)を見てください。ctypesを使わずにやりたいことを実行する必要があります。

編集

確認する必要がありますが、py7zlib.pyをざっと見ると、書き込みではなく、7zファイルの読み取りのみがサポートされていることがわかります。ただし、src dirにはpylzma_compressfile.c、があるので、何かすることがあるかもしれません。

編集2

pylzma.compressfile関数がそこにあるように見えるので、問題ありません。

于 2011-05-17T15:00:42.793 に答える
0

これは私の答えではありません。

Python から DLL ファイルを使用するにはどうすればよいですか?

私はctypesが行くべき道だと思います。

次の 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 は、参照によって渡された変数を変更することによって値を返します)。

于 2011-05-17T14:44:22.997 に答える