如何使用 python 脚本在步进负载定义部分插入关键字?
how to insert keyword in the step load definition section using python script?
我正在使用 python 将 *Include, Input=file.inp 插入阶跃载荷定义部分以在节点上应用压力边界条件。这是我的脚本,但是,它被插入到零件级别部分。我想知道如何使用 python 来控制插入位置。谢谢
def GetKeywordPosition(myModel, blockPrefix, occurrence=1):
if blockPrefix == '':
return len(myModel.keywordBlock.sieBlocks)+1
pos = 0
foundCount = 0
for block in myModel.keywordBlock.sieBlocks:
if string.lower(block[0:len(blockPrefix)])==\
string.lower(blockPrefix):
foundCount = foundCount + 1
if foundCount >= occurrence:
return pos
pos=pos+1
return +1
position = GetKeywordPosition(myModel, '*step')+24
myModel.keywordBlock.synchVersions(storeNodesAndElements=False)
myModel.keywordBlock.insert(position, "\n*INCLUDE, INPUT=file.inp")
您可以适配re
模块。这应该有效
import re
# Get keywordBlock object
kw_block = myModel.keywordBlock
kw_block.synchVersions(storeNodesAndElements=False)
sie_blocks = kw_block.sieBlocks
# Define keywords for the search (don't forget to exclude special symbols with '\')
kw_list = ['\*Step, name="My Step"']
# Find index
idx = 0
for kw in kw_list:
r = re.compile(kw)
full_str = filter(r.match, sie_blocks[idx:])[0]
idx += sie_blocks[idx:].index(full_str)
UPD:根据要求进行一些解释
由于 .inp 文件中的关键字可能有些重复,这里的主要想法是创建一个“搜索路径”,其中列表中的最后一个模式将对应于您要进行修改的位置(例如,如果您想在特定的“*Instance”关键字之后查找“*End”关键字。
所以我们通过我们的“搜索路线”迭代地进行 == 搜索模式列表:
- 编译正则表达式;
- 从索引
idx
开始查找 sie_blocks
中模式的第一次出现;
- 更新
idx
以便从此处开始执行下一次搜索。
希望这会有所帮助
我正在使用 python 将 *Include, Input=file.inp 插入阶跃载荷定义部分以在节点上应用压力边界条件。这是我的脚本,但是,它被插入到零件级别部分。我想知道如何使用 python 来控制插入位置。谢谢
def GetKeywordPosition(myModel, blockPrefix, occurrence=1):
if blockPrefix == '':
return len(myModel.keywordBlock.sieBlocks)+1
pos = 0
foundCount = 0
for block in myModel.keywordBlock.sieBlocks:
if string.lower(block[0:len(blockPrefix)])==\
string.lower(blockPrefix):
foundCount = foundCount + 1
if foundCount >= occurrence:
return pos
pos=pos+1
return +1
position = GetKeywordPosition(myModel, '*step')+24
myModel.keywordBlock.synchVersions(storeNodesAndElements=False)
myModel.keywordBlock.insert(position, "\n*INCLUDE, INPUT=file.inp")
您可以适配re
模块。这应该有效
import re
# Get keywordBlock object
kw_block = myModel.keywordBlock
kw_block.synchVersions(storeNodesAndElements=False)
sie_blocks = kw_block.sieBlocks
# Define keywords for the search (don't forget to exclude special symbols with '\')
kw_list = ['\*Step, name="My Step"']
# Find index
idx = 0
for kw in kw_list:
r = re.compile(kw)
full_str = filter(r.match, sie_blocks[idx:])[0]
idx += sie_blocks[idx:].index(full_str)
UPD:根据要求进行一些解释
由于 .inp 文件中的关键字可能有些重复,这里的主要想法是创建一个“搜索路径”,其中列表中的最后一个模式将对应于您要进行修改的位置(例如,如果您想在特定的“*Instance”关键字之后查找“*End”关键字。
所以我们通过我们的“搜索路线”迭代地进行 == 搜索模式列表:
- 编译正则表达式;
- 从索引
idx
开始查找sie_blocks
中模式的第一次出现; - 更新
idx
以便从此处开始执行下一次搜索。
希望这会有所帮助