PythonでExcelファイルの読み込み

Mac, Python コメントは受け付けていません。

ネットで公開されている「.xls」形式のExcelファイルを扱おうとすると、Office 2008 for MacNeoOfficeを使うのが基本でしょう。

ただ、やりたいことは、表計算ソフトの使用ではなく、データの表示と加工(CSV形式にしたり、HTMLとして出力したり)なのです。以下のような方法でできるのが理想。

  1. コマンドラインプログラムで加工
  2. GUIプログラムで加工

CocoaならどちらでもOKだろうと調べてみましたが、有益な情報にヒットせず。

そういえば、RubyでExcelファイルを扱う記事があったよなと、「Rubyist Magazine – Win32OLE 活用法 【第 2 回】 Excel」をみてみるも、残念なことに、どうもWindows環境じゃないとダメらしい。困った。

一応、Pythonのも調べてみてみたら、こちらのページを発見。

なんと、pyExceleratorを使えば、Windowsなしでエクセルのファイルを扱えるみたい。ただ、気がかりなのは、2005年以来更新されていない点。

そのあたりを更に調べてみると、「pyExcelerator以外の選択肢 – Ni chicha, ni limona -平均から抜けられない僕-」に辿り着きました。xlrdでも、Windows無しでの読み込みが可能だそうです。

早速easy_installでインストールして、READMEAPIに従って試してみると、あっさり成功。日本語も扱えそうで、一安心。

NewsgroupのFAQsによると、pyExceleratorからフォークしたxlwtを使えば、書き込みもできるらしい。ありがたいですね。

あとは、PyObjCでGUIを付けたいところですが、PyObjCを習得するのが大変そうです。

urllib2でValueError

Python コメントは受け付けていません。

杉並区に続き、練馬区立図書館でもスクレイピングをしてみようと、Pythonのurllib2でアクセスしてみると、ValueErrorに遭遇。

  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 304, in read
    data = self._sock.recv(rbufsize)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 509, in read
    return self._read_chunked(amt)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 548, in _read_chunked
    chunk_left = int(line, 16)
ValueError: invalid literal for int() with base 16: ''

取得したデータをread()した時に、問題が発生しているみたい。他のURLでは起こらないので、データの方に問題があるとか?

ググってみると、PythonのIssue Trackerに報告があがってた。

» Issue 3721: invalid literal for int() with base 16: ” – Python tracker

こちらの書き込みに従い、MacPortsでPython 2.6.1をインストールして試してみると、問題なく成功。2.6.xでは修正されているようですね。

ただ、MacではPython 2.5.xをメインに使う予定なので、2.5が修正されないのはちょっと残念。

でも、バグを修正してくれた方々には、感謝。

杉並区立図書館の、「その日の新着図書」がわかるサイトを作ってみた

Python, Web, コメントは受け付けていません。

杉並区立図書館の、その日の新着図書が一目でわかるサイトを作ってみました。

スクリーンショット
» 杉並区立図書館 新着図書 更新情報 (非公式)

公式ホームページでは、一ヶ月間の新着図書が一度に表示されます。でも、毎日チェックしている身にとっては、その日入った本だけが知りたい情報だったりします。

数百冊リストアップされている図書情報から、脳内で前日との差分を取り出すのも、なかなか骨の折れる作業です。こういった単調で、面倒な定型作業は、人間ではなく、機械の方が適任でしょう。

このサイトを作ったお陰で、一度に数分から十数分かかっていた手動によるチェック作業が、数秒に短縮されました。

更新情報は、RSSでも出力するようにしてあるので、直接サイトにアクセスしなくても、livedoor ReaderGoogle リーダーのようなRSSリーダーでもチェックできます。

このサイトの利点

  • チェック時間の短縮
  • RSSリーダーでの購読が可能
  • ページ移動のためのクリックが不要に(クリック数: 10回→0回)
  • 新着図書の履歴を、過去までさかのぼれる

図書館側のメリット

新着図書をチェックしたいだけの利用者の方が非公式サイトを利用するようになれば、公式サイトへのアクセス負荷を軽減できます。RSSはFeedBurnerを介して配信しているので、高負荷になっても安心です。

杉並区立図書館のホームページは、たまに応答が遅くなったりすることもあったので、負荷軽減にもお役に立てるのではないかと思います。

仕組み

  1. Pythonの標準モジュール、urllib2でHTMLを取得。
  2. lxmlライブラリで、formの送信や、CSSSelectorクラスによるスクレイピング
  3. SQLAlchemyでSQLite3のデータベースにアクセスし、取得した図書情報がデータベースに無ければ、新着図書として記録
  4. PyRSS2Genを使って、RSS 2.0形式で出力
  5. サイトへのアクセスがあれば、PHPでデータベースから情報を読み込んで表示

以上の手順をcronに登録して、定時(10:00 AM)に自動実行しています。

lxmlによるスクレイピングの方法は、「Ian Bicking: a blog :: lxml: an underappreciated web scraping library」が大変参考になりました。lxmlは、RESTで取得したXMLデータをXPathで解析するために重宝していましたが、スクレイピングにも利用できるとは知りませんでした。cssselectメソッドが、すごく便利です。

まとめ

地域限定な、ちょっと便利なサイトですが、杉並区の図書館をご利用の方はお試しください。

» 杉並区立図書館 新着図書 更新情報 (非公式)

第3回 PISCES 賞を受賞しました!

Mac, ソフトウェア 1 Comment »

なんと、拙作のクリップボード・ユーティリティ、ClipMenuが、初の栄冠に輝きました!

スクリーンショット

» 発表! 第3回 PISCES 賞(その1) : PISCES

PISCES 賞

今回いただいた賞は、第3回 PISCES 賞

 PISCES 賞とは、「年末はソフトの開発者さんもお休みモードで、書きたいネタがあまり出てこないんだよねぇ〜」ということで2006年に安易に創設された、Tom が感動したソフト5作品に贈られる権威のかけらもない賞であります。

 候補作は、その年に最初のバージョンがリリースされ、かつ PISCES で紹介したことがあるソフト。つまりは「来年もがんばって開発してくださいよ〜」と開発者にエールを送るとともに、暗に「来年もアップデートして、うちのブログにネタを提供してね(ハート)」とプレッシャーをかける賞でもあります。

 受賞作は選考委員の Tom 個人の独断と偏見によって選出され、受賞したソフトの開発者には Tom の熱いまなざしが贈呈されます。

熱いまなざし、ありがとうございます :)

来年もネタを提供できるように、がんばります!

ClipMenu 0.3.3 リリース

Mac, ソフトウェア コメントは受け付けていません。

クリップボード履歴定型文を利用できる、Mac OS X用ユーティリティ、ClipMenuのバージョン0.3.3をリリースしました。

今回は、機能の追加等はなく、不具合の修正のみです。発見したメモリリークも修正してありますから、バージョンアップをおすすめします。

主な変更点

  • XMLファイルから読み込んだスニペットが、メニュー内に現れなかった問題を修正。
  • 環境設定パネルで、メニューのフォントサイズを変更できなくなっていた問題を修正。

ダウンロード

ダウンロードはこちらからどうぞ。

» ClipMenu – naotaka.com

ClipMenuが『Mac Fan 2009年1月号』に掲載されました

Mac, ソフトウェア, コメントは受け付けていません。

拙作のClipMenuが、Mac Fan 2009年1月号に掲載されました!

以前にも、『別冊Mac Fan スグ使えるフリーソフトでおもてなし』に収録していただいたんですが、Mac Fan本誌の方でも紹介していただけました。うれしいです :)

取り上げていただいたのは、特集3の「メニューバー・Dockを鍛えろ!」。効率よくMacを使えるように、メニューバーとドックを強化しようという企画です。便利なオンラインソフトが、見やすくまとめられています。

ClipMenuは、70ページの「素早く操作するタイプ – したい操作をいつでも一発で行える」に登場。今回は、K2さんに作って頂いたニューアイコンが掲載されています。印刷されても、良い感じですね :)

お隣は、画面キャプチャをとるソフトInstantShot!。奇遇にも、InstantShot!は愛用しているユーティリティで、ClipMenuのスクリーンショット作成にも利用させていただいています。おすすめのツールです。

まだパラパラと見ているところなんですが、第4特集の「非開発者向けiPhoneアプリ開発講座」も、開発からApp Store公開までの流れが解りやすくまとまっていて良いですね。将来、参考にさせていただきます。

Mac Fan編集部の皆さん、ライターの皆さん、ありがとうございました!

市原隼人さんの、カッコイイ表紙が目印です。

Google App Engineのhelloworldで、いきなり躓く

Mac, Python, Web コメントは受け付けていません。

ClipMenu 0.3.2のリリースも済んだので、Google App Engineの勉強を開始。ClipMenuのウェブサイトを、GAEを使って作成しようと計画中なのです。Djangoを利用すれば、多言語化したサイトができそうなので。

まずは、スタート ガイドのチュートリアルをしようと、App Engine SDKの1.1.7をインストール。helloworldで必要なファイルを作成し、dev_appserver.pyを実行したら、いきなり躓きました。

AttributeError: 'module' object has no attribute 'HTTPSHandler'

初っ端からエラーが出ると、テンション下がっちゃうよ。

たぶん同じ問題に遭遇した人がいるだろうと、Google Groupsで検索。予想通り、解決策が示されていました。

どうやら、必要なPythonのライブラリが足りていないようです。MacPortsでpy25-socket-sslをインストールすると、無事にdev_appserver.pyでウェブサーバーが起動しました。

そのサーバーの出力を見てみると、まだImportErrorが出ている模様。

Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named PIL

ついでにpy25-pilもインストールしておこうと思ったら、今度はインストールの途中でエラーが。

unable to execute -DNDEBUG: No such file or directory
error: command '-DNDEBUG' failed with exit status 1
Error: Status 1 encountered during processing.

またググってたどり着いたのがこちらのページ。

leopardにtrac – studio suncrest

ただ、言及先を見てみても、よくわからない。Pythonをインストールし直したりするのも、ちょっと嫌だし。とりあえず、もう一度試してみようと、zshの履歴からコマンドを再実行してみたら、なぜか成功しちゃった!

% sudo port install py25-pil                                               
Password:
--->  Building py25-pil with target build
--->  Staging py25-pil into destroot
--->  Installing py25-pil 1.1.6_0
--->  Activating py25-pil 1.1.6_0
--->  Cleaning py25-pil

どこが問題だったのか、ちょっと釈然としないんですが、ともかくApp Engineのチュートリアルが進められるようになって助かりました。

有益な情報、ありがとうございました!

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン