ABAQUS名稱標準化工具
“ 作為一個ABAQUS二次開發者, 肯定少不了批量建立工況名稱, Job名稱之類的操作, 而從csv以及Excel文件導進來的字符串并不能很好地符合ABAQUS標準, 所以才有了這個小工具的面世。”
01
—
標準化思路
我們先在ABAQUS中隨便創建一個不符合命名規定的step, 將報錯窗口截圖如下:
Names must be 1-38 characters long, may not begin with a number, may not begin or end with space or an underscore, and may not contain double quotes, periods, backward slashes, or non-printable characters.
譯文如下:
無效的名稱:
名稱必須長度為1-38個字符,不能以數字開頭,不能以空格或下劃線開頭或結尾,不能包含雙引號、句號、反斜杠或不可打印的字符。
再建立一個不符合要求的Job, 報錯如下:
Invalid name:
Names must be 1-80 characters long, may not begin or end with an underscore, and may not begin with a dash, and may not contain double quotes, periods, backward slashes, or non-printable characters or the following characters:......
譯文如下:
無效的名稱:
名稱必須長度為1-80個字符,不能以下劃線開頭或結尾,不能以破折號開頭,不能包含雙引號、句號、反斜杠或不可打印字符或以下字符:......
為了簡化處理這個問題, 我建議將所有規則做一個并集, 在符合該規則的情況下可以為所有ABAQUS的前處理進行命名.
暫時以這兩個為例, 總結一下命名規則:
may not be begin or end with:
數字(0123456789)
空格(" ")
下劃線("_")
破折號("-")
may not contain: . $ & * ~ ! ( ) [ ] { } | ; : ' ` " < > ? / \
總長度不超過38
這些不符合規定的字符串, 我們都有轉換為符合規定的字符串, 這些不符合規定的字符串大多數都是起著鏈接的作用, 我找了一圈, 發現加號(+)是一個不錯的代替者, 所以我將所有不能使用的字符均代替為"+"
接下來按照慣例, 我們整理一下流程:
輸入的變量必須判斷類型.
解決中英文符號的問題, 并將多空格轉換為單空格.
將may not contain中的字符串全部轉為"+".
判斷字符串長度是否超過需求, 若超過則截斷.
將may not be begin or end with中的字符串轉換為"+"
返回結果字符串
02
—
源代碼
# -*- coding: utf-8 -*-
# -*- coding: mbcs -*-
# @Time : 2021-1-20 13:55
# @Author : Group
# @Email : **********
# @File : standard.py
# @Software: PyCharm
import re
def standard_str(s, length=20, flag='+'):
"""
為防止出現不標準的名稱導致錯誤, 將所有字符串進行標準化.
該方法應根據已知的ABAQUS命名規則編寫, 并在日常使用中進行豐富和擴展.
:return: s
"""
"""
輸入的變量必須判斷類型, 如果是字節類型, 需要進行解碼, 如果不是字節也不是字符串就轉換為字符串, 轉換失敗就報錯.
"""
if s is None:
s = ''
elif not isinstance(s, str):
s = str(s.encode("utf-8"))
"""
解決中英文符號的問題, 并將多空格轉換為單空格.
"""
# 中英文符號統一
s = s.replace('(', '(').replace(')', ')').replace('【', '[').replace('】', ']'). \
replace(',', ',').replace('。', '.').replace(';', ';').replace('\n', '')
# 多個空格替換為1個空格
s = re.sub(' +', ' ', s)
"""
將may not contain中的字符串全部轉為"+".
"""
chars = [".", "$", "&", "*", "~", "!", "(", ")", "[", "]", "{", "}", "|", ";", "'", "\"", "`", "<", ">", "?",
"\\", "/"]
for char in chars:
s = s.replace(char, flag)
"""
判斷字符串長度是否超過需求, 若超過則截斷.
"""
if len(s) > length:
s = s[:length]
"""
將may not be begin or end with中的字符串轉換為"+"
"""
s = re.sub('(^[-_\d ])|([-_\d ]$)', flag, s)
return s.lower()
由于我們并沒有將所有的ABAQUS命名規則找出來, 所以該工具以后還可以工具個人的使用情況做升級. 如發現新的may not contain則在charts里面添加, 如發現新的may not be begin or end with則更改第48行的正則表達式.
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















