壁紙検索などしてみた
最近モニタを24''WUXGAに変えました。
ちょーでかいです。
とりあえず壁紙を変えようということでWUXGAの壁紙を我が10万オーバーの画像ファイル群から・・・
探せるか!
ということで、Pythonで書いてみました。
やりたいこと
特定のフォルダ以下に存在する画像ファイルのうち、WUXGAサイズ(1920*1200)のもののみをリストアップする
一覧HTMLとかにできると幸せ
コード
import Image import os, re from time import sleep wuxga = (1920, 1200) flist = open("d:\wuxgalist.html", "w") try: for (root, dirs, files) in os.walk(u'd:\\nijiura'): for f in files: filepath = root + u"\\" + f filename = filepath.replace(u"\\", u"/") if re.match(u".*/thumb/.*", filename) or re.match(u'\\.htm', filename): continue try: img = Image.open(filepath) print img.size, filename if img.size == wuxga: tag = "<a href=\"file:///" + filename + "\"/><img src=\"file:///" + filename + "\" width=\"192\" height=\"120\"/></a><br />" + filename + "<br />" flist.write(tag.encode('utf_8')) print u"!!!!発見!!!!", filename sleep(1) except IOError: print "I/O ERROR in", filename finally: flist.close()
解説
os.walk()でフォルダ以下のファイルリストを取得できます。
参考:http://www.nishiohirokazu.org/blog/2006/03/python.html
得られたパス名をつなげてフルパスにして、htmlに書き出す用に\を/に置き換えたフルパスも作っておく。
あとはImageに読ませて、サイズを比較して一致したらファイルに書き出す。
マッチしたらcontinueしてる部分は、検索しても無意味なサムネイルフォルダとそもそも画像じゃないhtmファイルを避けるためのものです。
あとPILでインターレースPNGを開こうとするとIOErrorを返されるので例外処理は結構重要。
結果
40KBほどのHTMLファイルができました。
どれだけかかったかは計測しませんでしたが、結構長いことかかってると思います。
誤算
重くてとても開ききれません。
そりゃWUXGAサイズの画像を140枚も表示してりゃそうなりますね。
改善するとしたら適量溜まったら別ファイルに変えるとかそのぐらいかなぁ…
ということで
また書いてみた
参考:ファイル操作 - ひきメモ
flist = open("d:\wuxgalist.html", "r") try: lines = flist.readlines() for i in range(0, len(lines), 20): split_file = open("d:\wuxgalist_%d-%d.html" % (i,i+20), "w") split_file.writelines(lines[i:i+20]) split_file.close() finally: flist.close()
簡易説明
0〜行数の範囲で20とびの数字でループする
ループ変数の値からファイルを作る
20行分を書き込む