EmptyPage.jp > Gadgets > zengin.py
公開: 2005年9月26日/更新: 2009年1月17日
zengin.py は振込先、振込金額のデータを格納した CSV(カンマ区切り)形式のファイルから、全国銀行協会制定フォーマット(通称全銀フォーマット)形式の振込情報ファイルを生成するスクリプトです。
変換元 CSV ファイルのデータ構造や文字コードをテンプレートファイルで指定できます。元データの並び順に柔軟に対応できます。
変換元 CSV ファイルでの口座名義や金額の表記が比較的柔軟です。口座名の全角カナは半角カナに自動的に変換されます。金額部分は通貨記号や 3 桁ごとの区切り記号が含まれていてもきちんと数値として認識します。
コマンドラインフィルタである。GUI のツールは、僕が試したものはどれもひじょうに使いにくいものばかりだったので、コマンドラインから使えるというのはむしろ長所のつもりです。
無料。ソースも公開。
「Excel やデータベースからの CSV 出力をできるだけそのまま食わせたい」「使いやすい GUI のツールが見つからなかった」というのが開発のおもな動機になっています。
短所も挙げておきます。
コマンドラインフィルタであるというのは、慣れてない人にとってはとっつきにくいかもしれません(でも一度やってみればすぐわかると思いますよ)。
zengin.py は Python スクリプトです。使用するには Python 2.4 以降を利用できる環境が必要です。Python については以下をご参照ください。
バージョン 0.2.1 からスクリプトを Windows の実行可能ファイル (.exe) に変換したものを用意しました。Python インタプリタをインストールせずに実行できます。こちらを使用する場合は、本ドキュメントの zengin.py を zengin.exe に読み替えてください。
zengin.py は単純なスクリプトです。アーカイブ内のファイルを任意のディレクトリに展開して実行してください。
zengin.py -a account-filename -t template-filename -f format [-b] [-d date] [-o output-filename] [csv-filename]
角括弧 [...] で囲まれているものは、そのオプションが省略可能であるということをあらわします。省略された場合の挙動は各オプションの解説を参照してください。
オプションはすべて大文字・小文字が区別されます。小文字のオプションを大文字で指定してしまわないように注意してください。各オプションの意味は以下の通りです。
振込を行う出金口座の情報を記述した、アカウント・ファイルのパスを指定します。「アカウント・ファイルの書式」を参照。
変換元 CSV ファイルのデータの書式情報を記述した、テンプレート・ファイルのパスを指定します。「テンプレート・ファイルの書式」を参照。
出力する全銀フォーマットの種類を指定します。format には以下のいずれかを指定します。
給与振込: | kyuuyo |
賞与振込: | shouyo |
総合振込: | furikomi |
振込を行う日付を指定します。date には YYYY-MM-DD 形式の日付を記述します(例: 2005 年 9 月 22 日なら 2002-09-22)。省略した場合は現在の日時が使われます。
csv-filename をタブ区切りのファイルとして読み込みます。
変換結果の出力先ファイルを指定します。省略した場合は標準出力に出力します。
変換元の CSV ファイルのパスを指定します。省略した場合は標準入力から取り込みます。
アカウント・ファイルには、出金元となる口座の情報を記述します。ファイルは以下のような書式で指定します。
account.cfg
# アカウント・ファイルのサンプル # '#' で始まる行はコメント。 # このファイルのエンコーディング。 encoding: shift_jis # 口座名義。カタカナで。 name: シバタ マサアキ # 金融機関コード。4桁数字。 bank: 7777 # 支店番号。3桁数字。 branch: 555 # 預金種目。1: 普通, 2: 当座。文字列「普通」「当座」でもよい。 type: 普通 # 口座番号。7桁数字。 account: 0123456
テンプレート・ファイルには、変換元の CSV ファイルについての情報を以下のような書式で記述します。
template.cfg
# テンプレート・ファイルのサンプル # '#' で始まる行はコメント。 # CSV ファイルのエンコーディング。 encoding: shift_jis # CSV ファイルの一行目が見出し(ヘッダ)なら 'header' を指定する。そうでなけれ # ば 'data' を指定。 firstline: header # CSV ファイルでのデータの出現順をカンマで区切って指定。現在のところ、以下のシ # ンボルが使用できる。 # # name: 口座名義 # bank: 金融機関コード # branch: 支店番号 # type: 預金科目 # account: 口座番号 # amount: 振込金額 # ex1: 社員番号(オプショナル) # ex2: 所属コード(オプショナル) # # 使用されないカラムにはなにもシンボルを入れずに区切りのカンマだけを記入する。 # # 例: 口座名義、金融機関名、金融機関番号、支店名、支店番号、口座科目、口座番号、金額 # という順番の場合、 # fields: name,, bank,, branch, type, account, amount # ※ 金融機関名、支店名は変換には使われないので空欄になっている。 fields: , name,,, bank, branch, type, account, amount
注意: 0.2.0 より前のバージョンでは、振込み金額の指定シンボルが ammount となっていました。0.2.0 以降ではこのスペルミスが正しい綴り、amount に修正されています。このため、0.2.0 以降の zengin.py を使用するには、それまでのテンプレートファイルの該当箇所を書き換える必要があります。
変換元である CSV ファイルは、テンプレート・ファイルに指定した形式にのっとっているようにします。各項目には以下のような値を使用できます。
項目 (シンボル) | 使用できる形式 |
---|---|
口座名義 (name) | 全角・半角カタカナ |
金融機関コード (bank) | 4 桁数字 |
支店番号 (branch) | 3 桁数字 |
預金科目 (type) | 文字列 "普通", "当座" または 1, 2 |
口座番号 (account) | 7 桁数字 |
振込金額 (amount) | 10000 10,000 ¥10,000 |
社員番号 (ex1) | 数字 |
所属コード (ex2) | 数字 |
以下は処理できる CSV ファイルの例です(Microsoft Excel から[名前をつけて保存]コマンドで CSV ファイルとして保存したもの)。このデータを処理するなら、テンプレートファイルの fields の設定を「fields: , name,,, bank, branch, type, account, amount
」としておきます。「firstline: header
」も必要でしょう。
banking.csv
口座名義, フリガナ, 金融機関名, 支店名, 金融機関コード, 支店番号, 科目, 口座番号, 振込額 中村 友次郎, ナカムラ ユウジロウ,□□銀行, ××支店,8888,666, 普通,3141592,"\2,000,000"
Copyright (c) 2005 M.Shibata Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
BSD ライセンスです。(参考日本語訳)
s/ammount/amount/