Sphinxでグリッドテーブルに全角記号を使った場合のエラー

ドキュメントの作成に、ドキュメントが簡単に作れるツール Sphinx を気に入って使っています。

先日、グリッドテーブル(Grid Table)に全角記号を入れるとエラーになるということに気がつきました。
具体的には、以下のようなものがエラーになってしまいます。

しかし、次のようにするとエラーなく処理されます。

横幅がそろっていないとエラーになるはずが、そろっているとエラーになり、ずらすとエラーがなくなるいう状態です。

困って調べたところ、Pythonのdocutilsパッケージが原因であることがわかりました。

グリッドテーブルが正しい形式になっているかを確認するときに、docutils内で、グリッドテーブルの各行の長さを計算しています。そのとき、ひらがなや漢字などの全角の文字は、半角2文字分の幅を取っているので、見た目と合わせるために、長さを2として計算されます。しかし、「→」などの全角記号が長さを1として計算されているため、見た目とずれてしまっています。

これを修正するために、以下のようにしました。環境はDebian9(stretch)です。

システム側のdocutilsを変更しないで済ませるために、ユーザのホーム以下のディレクトリにコピーをします。ここでは「.pythonlib」というディレクトリ名にしましたが、これは任意の名前で構いません。

このディレクトリを、モジュールファイルのデフォルトの検索パスに追加するために、環境変数を設定します。bashならば、以下の行を環境設定ファイル(「.profile」など)に記述します。

環境設定ファイルを読み込めば有効になります。

コピーしたdocutilsディレクトリ配下の「statemachine.py」の

のように変更します(「A」を追加)。

また、今回の修正には直接関係ありませんが、整合性をとるため、コピーしたdocutilsディレクトリ配下の「utils/__init__.py」の

のように変更(「1」を「2」に変更)しておくといいと思われます。

以上で、全角記号を含んだグリッドテーブルで、見た目がそろっていればエラーが出ずに処理できるようになりました。

MySQLをインストールする

Python+MySQLの組み合わせでCGIシステムを作成するために、MySQLとPythonとのインターフェースをインストールします。MySQLの文字コードはutf8とします。

  • mysql-serverパッケージをインストールする。MySQLのrootユーザのパスワードを設定する。
  • /etc/mysql/my.cnfを変更し、文字コードを設定する。
  • PythonとMySQLのインターフェース関連のpython-mysqldbパッケージをインストールする。Pythonで、import MySQLdbが実行できれば準備完了です。

Pythonのdatetime型のデータで引き算を行なう

例えば部屋などの予約をする場合、使用開始時刻と使用終了時刻が入力され、何時間使用したかを算出したいとします。

時刻のデータ型はdatetime型とします。
Pythonのバージョンは2.7.6です。

[例1]
使用開始時刻:2014年12月18日 10:00
使用終了時刻:2014年12月18日 11:30
使用時間:1.5(h)

24時間を超える可能性がある場合は total_seconds() というメソッドを使うとうまくいきます。

[例2]
使用開始時刻:2014年12月19日 12:00
使用終了時刻:2014年12月20日 13:30
使用時間:25.5(h)

指定したディレクトリのファイル一覧を出力する

プログラミング言語は主にPythonを使用しています。
よく使うのにすぐ忘れてしまう命令を少しずつ書いていこうと思います。

ある任意のディレクトリ下にあるファイルの一覧を出力する方法です。
ファイル名はリストで出力されます。