ここまで作成してきたスクリプトではカンマを区切り記号としてsplitしただけで、CSVを正しく取り扱ってきませんでした。 IronPythonにはCPythonの標準ライブラリに含まれるcsv.pyは添付されません。 そこで.Netライブラリに含まれるクラスを使います。
これまで作成したファイルに次のようなCSVファイルを処理させると画面が崩れてしまいます。
name,age,address "yasu,hiro",20,AizuWakamatsu abe,25,"Yokohama Aoba-ku"
まずはコマンドライン上で動くアプリケーションからMicrosoft.VisualBasic.FileIO.TextFieldParserクラスを使用します。 このクラスはC#のサンプルがAPIリファレンスにありIronPythonからも問題なく使えそうです。
同じディレクトリに配置されたファイルから、他のファイルに書かれたクラスを呼びたい場合には、そのライブラリファイルからみたパスでimport文を使うことになります。 以下の例ではMyDataTableクラスのloadCSV()メソッドから"a09_lib\mycsv.py"で定義されたMyCSVクラスを参照するために、"a09_lib\mydata.py"に次のような宣言を利用しています。
... import mycsv from mycsv import MyCSV ...
sys.pathにあるフォルダ('.')からの相対パスではなくて、ライブラリの配置されている場所からのパスで書く必要のあるところが少し変っていると思います。
次のスクリプトと下記4つのライブラリ系ファイルを配置して動かすことができます。
# 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 ""
メインは今回作成した"mycsv.py"ファイルです。 その他に"mydata.py"ファイルからも"mycsv.py"で定義されたMyCSVクラスを参照しています。
次のような出力が得られます。
次はDataGridViewに、このファイルを読み込ませてみます。
Created: 2010-03-13, Last modified: 2010-03-19
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.