PythonでExcelを操作する時のメモ
Windows版のPythonとwin32com モジュールを使うことで、VBAからしか使用出来ないような機能が Pythonからも使用できるようになる。
Git等と連携できる点や、普通のPythonモジュール(正規表現やXML/JSON処理等)が使える点が圧倒的に便利で、、もはやVBAには戻れない。
インストール
本体とモジュールをインストールする(Windowsのみに対応)
- Python本体:
http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi
- win32comモジュール:
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/
役に立つリソース
- 全般的:
http://mono-comp.com/programming/python-win-excel
https://sites.google.com/site/pythoncasestudy/home/pywin32kara-comwo-tsuka-tsu-te-excelwo-sousa-suru-houhou
- セル数が多いときの必須テクニック:
http://d.hatena.ne.jp/Wacky/20091011/1255259575
- 手前味噌なサンプルスクリプト(不定期更新):
https://github.com/aaabbb200909/test01/blob/master/win32excel.py
- 追記: Oreilly本(特にmakepy.py の使い方)
http://oreilly.com/catalog/pythonwin32/chapter/ch12.html
2013年04月06日のツイート
@aaabbb_200909: excel台帳は甘え(キリッ
2013-04-06 23:51:42 via web
@aaabbb_200909: サーバーがなくなったらLAN線を抜いた時点で全ての定義がなくなるのがいい。なので、inventoryは実機のCSVファイルをPuppet factで取り込む形にして、抜いた直後にPuppetmaster側から一括削除する。
2013-04-06 23:50:36 via web
@aaabbb_200909: RT @Ya_mai_pino: 今日、生でプロポーズしてるところ見た!!なんか感動的だったしすごい幸せな気分になったー♪おめでとうございます(*^^*) ちなみに答えはNO。 URL
2013-04-06 23:38:48 via web
@aaabbb_200909: 蒙古タンメンも食べにいきたいのだが、あいにくの雨。。。
2013-04-06 23:25:21 via web
@aaabbb_200909: "メタプログラミングruby"を購入したいのだが、あいにくの雨。。
2013-04-06 22:36:12 via web
@aaabbb_200909: MQのオープンソースは結構インパクトがある気がする。あれば便利だが、値段が気になることも多いので、、
2013-04-06 22:06:00 via web
@aaabbb_200909: [ブログ]qpid+gluster-swift でファイル転送 URL
2013-04-06 21:52:45 via web
@aaabbb_200909: ひょっとして swift post acl 等で変えられるのかと思ったらそんなことはなかった。。。
2013-04-06 19:56:48 via web
@aaabbb_200909: glusterfs のUFO でアップロードした後、nativeクライアントから読み取ろうとしたら所有者root 600 なので、chmod/chown が出来ない。。orz
2013-04-06 19:52:10 via web
@aaabbb_200909: [ブログ]gluster objectストレージを試してみた URL
2013-04-06 16:56:35 via web
@aaabbb_200909: RT @sato3794: 夫は豚カツも好きだしカレーも大好きなのに「カツカレーを作る」と言うと「やめてくれ!」と全拒否される。理由を何度か聞いたが、よくわからないけど要約すると「幸せすぎて怖い」みたいなことを言う。乙女か。
2013-04-06 15:52:46 via web
@aaabbb_200909: [ブログ]GitでExcel2003のdiffを取る方法 URL
2013-04-06 15:52:26 via web
@aaabbb_200909: [ブログ]Apache qpid稼働確認時のメモ URL
2013-04-06 15:51:12 via web
@aaabbb_200909: [ブログを書きました]qpidでルーティングを作るときのメモ URL
2013-04-06 15:49:46 via web
Apache qpid稼働確認時のメモ
※ CentOS6のqpidで確認
CentOS python-qpidパッケージにはいくつかサンプルのスクリプトが付いてきており、そちらを使って、qpidの動作確認をする場合のメモ。
ファイルの置き場所は /usr/share/doc/python-qpid-0.14/examples/api/ で使用するファイルは hello, drain, spoutとなる。
helloは指定されたキューにメッセージを書き込み、そのまま受信するので単体で使える。(Exchangeに対しても使用可能)
drain, spoutはそれぞれ受信/送信だけを行うので、組み合わせて使う。(Queueではなく、Exchangeに対して使う場合はは工夫が必要。。)
qpidのインストールを終えたら、まずhello で helloworldがかえってくるかを確認する。(単体qpidでの疎通確認)
./hello
その後、drain -r -f amq.fanout を実行しつつ, spout amq.fanout で、任意のexchange, queue 指定でメッセージ送信が出来るかを確認する(bind, routing のテストにも使える)
./drain -r -f amq.fanout ./spout amq.fanout
※ amq.fanoutはqueueではなく、exchangeのため、メッセージを受信するためには、drainの-fオプションが必要なことに注意。。
サイズの異なるメッセージを送りたい場合第2引数にテキストファイルを指定するとそちらをメッセージに含めることが出来る。
./spout amq.fanout $(cat aaa)
queueを作成したい場合はqpid-config (qpid-tools パッケージを使用)
qpid-config add queue キュー名
※ デフォルトで作成されているamq.fanout, amq.topic などはExchangeで、メッセージを貯めることが出来ないので注意。。
queueが作成されたかどうかはqpid-config で確認できる。
qpid-config qpid-config queues
なお、キュー定義をdurableにしておかないと、qpidd再起動時にキューが消えてしまうので注意。(qpid-cpp-server-store パッケージが必要)
qpid-config add queue キュー名 --durable
GitでExcel2003のdiffを取る方法
やり方はまず、次のページからファイルのダウンロードを行い、 xls2txt を作成しておく。
※ Linux or Cygwin上で実施可能
http://wizard.ae.krakow.pl/~jb/xls2txt/
その後、次のページの形式に従って、.git 以下を編集しておく。
http://sixtease.livejournal.com/45387.html
.git/config に
[diff "excel"] textconv=/usr/local/bin/xls2txt.exe -A
.git/info/attributes に
*.xls diff=excel
これで、git diff でExcelの記述がテキストのdiffで表示されるようになるはず。
※ Excel2003でしか試していないので、それ以外だと無理かも。。
rsync+Gitで設定ファイルの差分管理
基本的にサーバーの設定はPuppet経由で実施しており、かつmanifestをGitで管理しているので、変更内容は後から容易にトラッキング出来るのだが、1台だけで実施していた作業や、暫定的に追加した対応については、サーバー上の設定を直接変更していることも多い。
その部分については、基本的には設定項目をExcelで管理していたのだが、変更項目が多かったり、今までに無い変更だったりすると、台帳のフォーマットに大きく変更が入ってしまうことがある。
また複数人で作業していると台帳更新が徹底されないこともあり、もう少し上手いやり方が欲しいところだった。
より上手い方法として、サーバー上で変更が頻繁に入る部分を、日次でrsyncでGitサーバーに転送しておき、かつGitサーバーではcronでdailyコミットを行うことで、各設定ファイルの差分を管理していくことにした。
やり方としては次のようになる。(CentOS6で実施。)
1. Gitサーバー側での作業
1-1.
次のような/etc/rsyncd.confを作成しておく。
uid = root gid = root [rsyncbackup] path = /srv/rsyncbackup read only = false
合わせて/etc/xinetd.d/rsync でdisable = no を設定し、xinetd を有効化しておく。
1-2.
/srv/rsyncbackup でgit initを実施しておく。
1-3. cronに次の登録を実施しておく。
cd /srv/rsyncbackup && git add -A . && git commit -m "daily commit" > /dev/null 2>&1
2. 管理したいサーバーに 次のcronを登録する。(転送対象, 除外対象、転送時刻は適宜変更)
2 1 * * * cd / && rsync -aqzR --exclude=/etc/selinux /etc /usr/local serverfqdn::rsyncbackup/$(hostname)
これで、各サーバーの設定ファイルがGitで管理できるようになる。普段.yyyymmdd などのバックアップファイルで管理している部分までdiff形式で取得できるようになるのでとても便利だ。また、スクリプトの開発等で使用しているサーバーに入れておくことで、各サーバーにGitを入れなくてもスクリプトのバージョン管理が出来るようになる。
[考慮点]
- 一部のファイル (/etc/adjtime など) は定期的に内容が変化して、その度にコミットが発生してしまう。こちらを回避するために不要な項目については .gitignoreに追加していく必要がある。
- Gitはレポジトリのサイズが大きくなるとgit status, git log --stat などのスピードが落ちるので、各サーバーから送付するサイズはできる限り絞った方がよい。
- DBの中に設定を持つような場合、PostgreSQLならテーブル指定のpg_dump等を使用して設定ファイルとして落とし込む必要がある。
- rsyncに--deleteをつけた方がよいかは今後の課題。
[今後の展開]
- Puppetマニフェストもそうだが、こちらのレポジトリもRedmineと組み合わせておくと、チケット内容(日付、実施者、変更意図、作業ログなど)と実機の設定変更の内容を関連付けることが出来る。後から実施内容を振り返る際にとても便利そうだ。。
※ トラックバック
http://d.hatena.ne.jp/enakai00/20131001/1380616727
perlでgmetricを使う場合の注意点
こちらのperl gmetricだが、v3.0用で3.2系では動かなかった。。 https://github.com/athomason/perl-Ganglia-Gmetric-PP 3.1以降を使う場合はこちらをおく必要がある。 http://pastebin.com/NyzGVdW8