擅长:python、mysql、java
<p>您的方法非常有创意,但是使用Abaqus Python API有一种“标准”方法来实现您的目标:</p>
<pre><code>frame.FieldOutput(name='works', description='this is a vector', type=VECTOR).addData(position=INTEGRATION_POINT, instance=grout_instance, labels=elementLabels, data=elementData)
</code></pre>
<p>在您的代码中,我观察到两个可能的错误:</p>
<ol>
<li>新旧名称(“SDV2”和“works”)的长度不匹配。在</li>
<li>ODB文件的二进制数据段可能包含4个意外匹配“SDV2”的后续字节。在这种情况下,脚本会覆盖这些字节并损坏整个文件。在</li>
</ol>
<h2>编辑1</h2>
<ol>
<li><p>由于Abaqus没有提供任何删除现有字段的方法(正如他们所说,出于一致性原因),如果您希望使用<code>addData</code>方法来防止重复,则有必要创建一个新的ODB并在那里复制字段。然后可以删除旧文件。我们已经用这种方法一年了。这样做的好处是可以从不同的sdv创建向量或张量,以便更好地可视化。</p></li>
<li><p>要修复我之前标注的可能错误(长度不匹配和意外替换),可以使用<code>find</code>代替<code>replace</code>。</p></li>
</ol>
<p>你可以试试这个代码</p>
^{pr2}$
<p>其他代码遵循您的脚本。我假设您只需要替换文件中每个名称的一次出现。否则请使用<code>re</code>的<a href="https://docs.python.org/2/library/re.html#re.finditer" rel="nofollow">^{<cd4>}</a>方法。在</p>