将DataTable传递给IronPython

5
我有一个.NET项目,其中我使用IronPython处理数据。目前,C#代码循环并为每个需要动态计算的行和列生成IronPython脚本。然而,我希望通过传递DataTable对象和要针对它执行的脚本来使该过程更加高效。不幸的是,我遇到了“DataTable对象不可订阅”错误,并且没有进行任何处理。
生成并执行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吗?

1个回答

10

DataTable对象真正的特点就是无法通过索引属性(即dt[index])进行访问,因此它是不可下标化的。

你可能指的是这个:

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

我用row变量替换了dt变量。


1
完全不要感到傻。由于Python是非编译语言,所以犯这种简单错误非常容易... - digEmAll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接