ファイルシステムはバイトを扱うが、私はビット単位でファイルにデータを読み書きするつもりだ。ビットをファイルに書き込む
私は〜850MBのファイルを持っていますが、目標は100MB未満にすることです。私はバイナリの "コードテーブル"を生成するために、delta + huffmanエンコーディングを使用しました。すべての "ビット"(別名ファイルの0と1の合計数)を追加すると、約781,000,000の "ビット"が得られるので、理論的にはこれらを約90MB程度で保存できるはずです。これが私が問題にぶつかるところです。書き込まれるバイナリがある
with open(r'encoded_file.bin', 'wb') as f:
for val in filedict:
int_val = int(val[::-1], base=2)
bin_array = struct.pack('i', int_value)
f.write(bin_array)
val
は各反復に沿って渡されている:私が見た他の回答に基づいて
は周りのSO、これは私が得ている最も近いです。これらは固定長ではなく、10
から最も一般的なものは111011001111001100
までです。 平均コードは5ビットです。上記のコードは約600MBのファイルを生成しますが、ターゲットからまだ離れています。
現在、私はPython 2.7を使用しています。私が絶対に必要ならPython 3.xにアクセスできます。 Pythonでも可能ですか? CやC++のような言語で簡単にできますか?
ファイルはバイトの全体数を(含まれている必要がありますので、あなたがいない実際にことを念頭に置いて保管ファイルにちょうど2または18ビットを書き込む)これは**直接可能ではありませんが、いくつかの中間バッファで実現できます。 –
8ビットのバッファを作成してから書き込みプロセスを実行しますか?最後のものか何かをその効果に詰めている間に? – amza
値をバイナリ形式にしていますが、それらを連結して後で明確に区別することはできますか?または、境界を示すために余分なデータをエンコードする必要がありますか? –