IronPythonを使ってみる

CSVファイルの正しい取り扱いについて

ここまで作成してきたスクリプトではカンマを区切り記号としてsplitしただけで、CSVを正しく取り扱ってきませんでした。 IronPythonにはCPythonの標準ライブラリに含まれるcsv.pyは添付されません。 そこで.Netライブラリに含まれるクラスを使います。

1. CSVファイルについて

これまで作成したファイルに次のようなCSVファイルを処理させると画面が崩れてしまいます。

カンマを含むCSVファイル

name,age,address
"yasu,hiro",20,AizuWakamatsu
abe,25,"Yokohama Aoba-ku"

$alt

まずはコマンドライン上で動くアプリケーションからMicrosoft.VisualBasic.FileIO.TextFieldParserクラスを使用します。 このクラスはC#のサンプルがAPIリファレンスにありIronPythonからも問題なく使えそうです。

2. ライブラリ間のクラス参照

同じディレクトリに配置されたファイルから、他のファイルに書かれたクラスを呼びたい場合には、そのライブラリファイルからみたパスでimport文を使うことになります。 以下の例ではMyDataTableクラスのloadCSV()メソッドから"a09_lib\mycsv.py"で定義されたMyCSVクラスを参照するために、"a09_lib\mydata.py"に次のような宣言を利用しています。

...
import mycsv
from mycsv import MyCSV
...

sys.pathにあるフォルダ('.')からの相対パスではなくて、ライブラリの配置されている場所からのパスで書く必要のあるところが少し変っていると思います。

3. サンプルコード全体

次のスクリプトと下記4つのライブラリ系ファイルを配置して動かすことができます。

a09_csvparser.ipyスクリプト

# coding=Shift_JIS
# @author: YasuhiroABE <yasu@yasundial.org>
#
from a09_lib import *

## csv filename
filedialog = MyOpenFileDialog()
filename = filedialog.open()
csv = MyCSV(filename)
for r in csv.eachRow():
  for i in r.eachItem():
    print i + "\t",
    pass
  print ""

3-1. その他のライブラリ

メインは今回作成した"mycsv.py"ファイルです。 その他に"mydata.py"ファイルからも"mycsv.py"で定義されたMyCSVクラスを参照しています。

4. 実行結果

次のような出力が得られます。

$alt

次はDataGridViewに、このファイルを読み込ませてみます。


Created: 2010-03-13, Last modified: 2010-03-19

2009,2010 © Yasuhiro ABE <yasu@yasundial.org>

Valid XHTML + RDFa RDFa it (RDF/XML)!

正当なCSSです!

Creative Commons License www.yasundial.org by Yasuhiro ABE is licensed under a Creative Commons Attribution 2.1 Japan License. Permissions beyond the scope of this license may be available at http://www.yasundial.org/info/license.html.