[pukiwiki]
[[swfmill:http://swfmill.org/]]の[[メーリングリストの過去ログ:http://osflash.org/pipermail/swfmill_osflash.org/]]を読もうとしたらgzipで圧縮されてまして。。。まとめて解凍するツールを持ってなかったのでPythonで。
次回用にメモ
<<追記>>
[[圧縮する方法もメモ:http://boxheadroom.com/2009/05/02/python-gzip#compress]]
[[5/3 zlibモジュールについて追記:http://boxheadroom.com/2009/05/02/python-gzip#zlib]]
[/pukiwiki]
コマンドプロンプトにて、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
[pukiwiki]
-[[zlib — gzip 互換の圧縮:http://www.python.jp/doc/release/lib/module-zlib.html]]
-[[Similar String algorithm compression-based distance(stackoverflow):http://stackoverflow.com/questions/451884/similar-string-algorithm/452956#452956]]
-[[圧縮を用いた類似度判定のための計算実験(PDF):http://www.tani.cs.chs.nihon-u.ac.jp/g-2008/shu/tyukan_shu.pdf]]
ToDo : Drag&Dropして解凍するのは、またいずれ。。。
[/pukiwiki]