Hatena::ブログ(Diary)

bonlife このページをアンテナに追加 RSSフィード

言及ISBN/ASIN
  • Ringo EXPO 08 [DVD]
  • 三文ゴシップ
  • my way
  • ビジネスパーソンのための話し方入門 (日経文庫)
  • ザ・グーグルウェイ グーグルを成功へ導いた型破りな戦略
  • 考え・書き・話す3つの魔法
  • 自分の答えのつくりかた―INDEPENDENT MIND

2015-11-30

Pythonで指定したディレクトリ配下のディレクトリ名とファイル名を取得する(改定案)

http://statsbeginner.hatenablog.com/entry/2015/11/26/134250

import os

def gen_filelists(path, abspath=False, sysfile=False):
    # 指定ディレクトリの配下にあるディレクトリやファイルをたどる
    for dirpath, dirnames, files in os.walk(path):
        # sysfile=False の場合、システムディレクトリ(.ではじまるもの)を対象外にする
        for dir in dirnames:
            if sysfile==False:
                if dir.startswith('.'):
                    dirnames.remove(dir)                
        for file in files:
            # sysfile=False の場合、システムファイル(.ではじまるもの)を無視
            if sysfile==False:
                if file.startswith('.'):
                    pass
                else:
                   # フルパスを出力するかどうかで処理を分岐
                    if abspath==True:
                        yield os.path.abspath(file)
                    else:
                        yield file
            # 下記パートが重複している点、カッコ悪いので改善が必要…
            else:
                if abspath==True:
                    yield os.path.abspath(file)
                else:
                    yield file

if __name__ == "__main__":
    print("abspath:False / sysfile:False")
    print([ file for file in gen_filelists('.', abspath=False, sysfile=False) ])
    # sysfile=True にした場合、Windowsでは os.path.abspath() が . で始まるフォルダを上手く扱えない?
    print("abspath:False / sysfile:True")
    print([ file for file in gen_filelists('.', abspath=False, sysfile=True ) ])
    print("abspath:True  / sysfile:False")
    print([ file for file in gen_filelists('.', abspath=True,  sysfile=False) ])
    print("abspath:True  / sysfile:True")
    print([ file for file in gen_filelists('.', abspath=True,  sysfile=True ) ])

2009-04-29 休んでる暇はないのです。

英会話レッスン受けてきました

bonlifeです。英会話レッスン受けてきました。なんて言うか、この内容じゃ成長できないですね…。メンバーとの絆を深める場と割り切った方が良さそう。

GW明けには海外メンバー集めた大会議をやる予定。プロジェクト事務局なので議事録係に任命されちゃいましたが、ものすごく疲れそうな予感。そんな心配以前に、新型インフルエンザの影響で開催が危ういわけですが。どうなることやら。

2009-04-13 朝型人間になります。

英会話レッスンを始めることにした

bonlifeです。私が所属している若手プロジェクトメンバーが半年間だけ英会話のレッスンを受けることになりました!チームリーダーからは「お前はどっちでも良い。」って言われましたが、一人だけ仲間外れも寂しいので私もレッスンを受けることに。先日、筆記試験と講師と英会話で腹の探り合いみたいなのをやったんですが、その結果が今日返ってきました。

  • PLACEMENT TEST RESULTS
セクションレベル
文構成力 (Sentence Structure)6
単語・熟語 (Vocabulary Knowledge)6
会話表現 (Expressions)6
リスニング力 (Listening)7
  • COMMUNICATION SKILLS
セクションレベル
LISTENING8.2
VOCABULARY8.4
GRAMMAR8.2
FLUENCY8.6
PRONUNCIATION8.6
OVERALL8.4

筆記試験はなんとなく解きづらいな、と思ったらやっぱりスコアも悪かったですね。会話の方は結構良い感じっぽい?でも、AEON COMPETENCY MATRIXによると、8.4だとTOEICの730点レベルっぽい。アイタタタ。やっぱり会話する機会がなかったもんなぁ。何はともあれ、半年のレッスンでどれくらいレベルアップできるか、楽しみです!

2009-01-31 明日は義妹の結婚式です。

Pythonでctypesやらwin32apiを使ってドライブの空き容量を調べるサンプル

bonlifeです。久しぶりにPythonに触れてみました。

コピーするフォルダーの容量は、os.walkを使って取得できました が、ドライブの空き容量の求め方がわかりません。仕方がないので、dirコマンドの出力を正規表現で切り出してみました。日本語の正規表現がわからないので、dos窓を英語モードにしてからdirコマンドを発行しています。

ドライブの残り容量を調べるpythonスクリプト ? lights on zope

なんだかあんまりスマートじゃないやり方…。こういうことは、Windowsに直接語りかければ答えが返ってくるはず!ということで調べてみると、GetDiskFreeSpaceExというものがありました。以下のような関数らしい。lpDirectoryName を指定して実行するとアレコレ情報が取得できるみたい。

BOOL GetDiskFreeSpaceEx(
  LPCTSTR lpDirectoryName,                 // ディレクトリ名
  PULARGE_INTEGER lpFreeBytesAvailable,    // 呼び出し側が利用できるバイト数
  PULARGE_INTEGER lpTotalNumberOfBytes,    // ディスク全体のバイト数
  PULARGE_INTEGER lpTotalNumberOfFreeBytes // ディスク全体の空きバイト数
);

ctypesを使ってみる

こういうのはctypes使うと良いってどこかで見かけたことがあったので、ctypesとGetDiskFreeSpaceExを元にGoogle先生にお伺いをたてたところ、まさにッ!なページを発見。

http://www.python-forum.org/pythonforum/viewtopic.php?f=18&t=9461#p43424

このままだとドライブを指定できなかったり、戻り値が ctypes.c_ulonglong で扱いづらかったりするので、少しだけ修正してみました。(失敗した場合の処理は省略。)

>>> from ctypes import *
>>> def free_disk_space(drive=None):
	free_bytes_available       = c_ulonglong()
	total_number_of_bytes      = c_ulonglong()
	total_number_of_free_bytes = c_ulonglong()
	a = windll.kernel32.GetDiskFreeSpaceExA(
		drive,
		byref(free_bytes_available),
		byref(total_number_of_bytes),
		byref(total_number_of_free_bytes)
	)
	return free_bytes_available.value, total_number_of_bytes.value, total_number_of_free_bytes.value

>>> free_disk_space('C:')
(397914681344L, 483934597120L, 397914681344L)
>>> free_disk_space()
(397914681344L, 483934597120L, 397914681344L)
>>> for i in free_disk_space('C:'):
	print i / (1024 ** 3), "GB"

370 GB
450 GB
370 GB

win32apiを使ってみる

ただ、pywin32をインストールしてwin32apiを使うと遥かに簡単に同じことが出来ちゃいます。

>>> import win32api
>>> win32api.GetDiskFreeSpaceEx('C:')
(397914681344L, 483934597120L, 397914681344L)
>>> for i in win32api.GetDiskFreeSpaceEx():
	print i / (1024 ** 3), "GB"

	
370 GB
450 GB
370 GB

楽過ぎる。pywin32は今日インストールしてはじめて使ってみましたが、IDLEでの補完も利くし、色々と遊べそうですね。

まとめ

スクレイピング的な処理をせずに情報を取得できないか調べてみたことで、bonlifeの視界が広がりましたとさ。Windowsの操作で何か困った時、今回の経験が活きますように。

2008-12-14 焼きたてのパンは美味しい。

WebSphere sMashの研修を受けて、刺激を受けた

bonlifeです。金曜日、先輩社員のお誘いでIBMに行ってWebSphere sMashのハンズオン研修を受けてきました。sMashってのはWeb2.0でマッシュアップなアレです。Enterpriseマッシュアップ基盤とかなんとか。

社内のデータが比較的加工しやすい状態(SOA)で提供されている場合、間にsMashを挟むことで情報共有を加速させることが出来るっぽい。

D

特徴は以下の通り。

  • Java SEで動く (シンプルでコンパクト)
  • 開発にはGroovy、PHPを使う
  • Webベースの開発ツール"App Builder"がなかなか使える (Yahoo! Pipesっぽい)
  • RESTful

Herokuが出た時にもビックリしましたが、ブラウザベースの開発って案外実用的なレベルになってるのかもしれませんね。Groovyはなかなかクールで柔軟な言語っぽいです。興味持った方はITアーキテクトの記事を読んで、試してみてください。結構面白いかも!

ただ、現実には連携させたいEnterpriseなデータはOracleやDB2に独自のルールでゴロゴロと詰め込まれているので、「CoC(設定より規約 or 設定の上に規約)」の考え方がそのまま適用できず、使いやすいAPIにするためにどこかで泥臭いことをしなきゃいけなくなるんですよね。 (適当な固定長のデータを生成するPGを作って、HULFTでデータ連携させる、とか。) ここを支援する仕組みが出来てくるとSOAももっと浸透すると思うんだけどなぁ…。

この研修内容自体は事前に予習した内容と同レベルだったので、特に発見もなかったんですけど、講師(id:nobusueさん)が印象的でした。Groovyに惚れ込み、仕事以外の時間で翻訳活動に参加してしまうというエネルギー!就業後と土日だけで洋書の翻訳ですよ。スゴイ。刺激を受けましたよ。なんか頑張らなきゃ!と思いました。仕事でGroovyを使う予定なんてありませんが、この本買ってみようかな。