5

IronPythonを使用してデータの処理を実行している.NETプロジェクトがあります。現在、C#コードはループして、動的計算を必要とする行と列ごとにIronPythonスクリプトを生成します。ただし、DataTableオブジェクトとそれに対して実行するスクリプトを渡すことで、プロセスをより効率的にしたいと思います。残念ながら、エラー'DataTable' object is unsubscriptable発生し、処理が行われません。

IronPythonスクリプトを生成して実行するためのC#スニペット:

DataTable dt = new DataTable();
dt.Columns.Add("count", typeof(int));
dt.Columns.Add("calc", typeof(int));
dt.Rows.Add(1, null);

ScriptEngine engine = Python.CreateEngine(options);
ScriptScope scope = engine.CreateScope();
scope.SetVariable("dt", dt);
ScriptSource source = engine.CreateScriptSourceFromString(code, SourceCodeKind.AutoDetect);
object result = source.Execute(scope);
DataTable table = scope.GetVariable<System.Data.DataTable>("dt");

テーブルに対して実行されるPythonスクリプト:

import clr
clr.AddReference('System.Data')
from System import Data
from System.Data import DataTable
for row in dt.Rows:
    dt["calc"] = dt["count"] + 1

エラーを修正するにはどうすればよいですか'DataTable' object is unsubscriptable、またはDataTableをIronPythonに渡すことを処理するためのより良い方法はありますか?

4

1 に答える 1

10

DataTableオブジェクトは実際にはサブスクライブできません。つまり、インデックス付きのプロパティ(つまりdt[index])からアクセスすることはできません。

あなたはおそらくこれを意味しました:

for row in dt.Rows:
    row["calc"] = row["count"] + 1

dtここで、変数を。に置き換えましたrow

于 2012-12-05T17:02:55.647 に答える