0

我正在编写一个 python 脚本,通过其 COM 函数使用 Aspen Plus 自动进行一些模拟。但是当我想获得分子量值时,我必须写这样的东西:

import os
import win32com.client as win32

aspen = win32.Dispatch('Apwn.Document')

aspen.InitFromArchive2(os.path.abspath('Aspen\\Flash.bkp'))

MW = aspen.Tree.Data.Properties.Parameters.Pure Components.REVIEW-1.Input.VALUE.MW ACID.Value

但它会在 REVIEW-1 中引发语法错误,因为连字符不能用作标识符。我怎么能这样使用它们?

编辑:

我将点语法替换为 Aspen COM 的 FindNode 函数,如下所示:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components\\REVIEW-1")

但是我仍然得到一个 None 对象,但是:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components")

工作,得到“COMObject FindNode”所以我认为问题也出在连字符上。

提前致谢!

4

2 回答 2

1

谢谢你的提示

对于有连字符的情况,以下应该起作用,而不是转义“\”字符:

MW = aspen.Tree.FindNode(r'\Data\Properties\Parameters\Pure Components\REVIEW-1\Input\VALUE')
于 2018-09-21T12:01:48.477 回答
0

好的,我试图在 Python 中解决它,但在 Aspen 重命名节点时更容易解决它。我还注意到,空格有时也会出现问题,因此也应该重命名。在某些情况下,它无法完成或我不知道如何完成,例如:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components\\REVIEW1\\Input\\VALUE\\MW ACID")

它返回一个 None 对象,我不知道重命名“MW ACID”,但有一个棘手的方法来获取值:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components\\REVIEW1\\Input\\VALUE")

for o in MW.Elements:
    if o.Name == "MW ACID":
        MW_acid = o.Value

现在它对我有用,但是由于迭代它会变慢。因此,如果有人知道如何在不重命名名称的情况下在 Python 中解决问题,它仍然会有所帮助。我尝试对不间断连字符使用 unicode 和字节表示法,但它也不起作用。

问候!

于 2018-07-31T08:33:13.260 回答