c# - 将 DataTable 传递给 IronPython

标签 c# python .net ironpython

我有一个 .NET 项目,我在其中使用 IronPython 执行一些数据处理。目前,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?

最佳答案

DataTable 对象确实不可订阅的,即不能通过索引属性(即 dt[index] )访问。

你可能是这个意思:

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

我用 row 替换了 dt 变量。

关于c# - 将 DataTable 传递给 IronPython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728305/

相关文章:

python - 按 Pandas 中的位置提取数字?

方法中的 C# 线程

c# - 为什么迭代 IQueryable 会为结果中的每个项目提供第一个值?

c# - .NET Treeview 不会在空控件上发送单击事件

python - Windows 常用项对话框 : ctypes + COM access violation

c# - 如何关闭已在目录中打开的文件

c# - 长度为 2 的多个构造函数。无法与 Unity 消除歧义

c# - 使用 Moq 在类上模拟一个方法而不是整个类?

Javascript 文件未加载到 aspx 中? ASP.NET C#

python - 为什么我得到分数幂的正结果?