swfmillのメーリングリストの過去ログを読もうとしたらgzipで圧縮されてまして。。。まとめて解凍するツールを持ってなかったのでPythonで。
次回用にメモ
<<追記>>
圧縮する方法もメモ
5/3 zlibモジュールについて追記
コマンドプロンプトにて、gzアーカイブが有るフォルダをカレントフォルダにして
python -c "import gzip,glob;[open(fn[:-3],'wb').write(gzip.open(fn).read()) for fn in glob.glob('*.gz')]"
右端がはみ出して読めなくてすんません
清書するとこんな感じ
import gzip
from glob import glob
flist=glob("*.gz")
for fn in flist:
#print fn
dat=gzip.open(fn).read()
open(fn[:-3],"wb").write(dat)
import gzip
fp=gzip.GzipFile("helloworld.txt.gz","wb")
fp.write("hello world\n")
fp.close()
gzipでの圧縮結果を文字列として取得
import gzip
import StringIO
fp1=StringIO.StringIO()
fp=gzip.GzipFile(fileobj=fp1,mode="wb")
fp.write("hello world\n")
fp.close()
dat=fp1.getvalue() # get as string
open("hello.txt.gz","wb").write(dat) # save as file
二つの文字列の類似度を計算するのに、それぞれを圧縮したときのサイズと、二つまとめて圧縮したときのサイズを比べる、というある手法があるみたいです。
こういうときは直に文字列で取得できたほうがよいかも。
文字列のみで取り回したい場合は、上記のようにStringIOモジュールを使うよりも、zlibモジュールを使ったほうが良いみたいです。
# -*- coding: utf-8 -*-
import zlib
txt="hello world"
compressed=zlib.compress(txt) #文字列を圧縮
print compressed.encode("hex") #16進数で表示
txt2=zlib.decompress(compressed) #解凍
print txt2
- zlib — gzip 互換の圧縮
- Similar String algorithm compression-based distance(stackoverflow)
- 圧縮を用いた類似度判定のための計算実験(PDF)
ToDo : Drag&Dropして解凍するのは、またいずれ。。。
Related posts
Tags: Python