基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)

這次推送聚焦于解決采用Python向Abaqus里導入txt、dat數據的問題(dat文件只需要將txt文件的后綴名改為dat就可以生成dat文件),Abaqus基于Python讀入txt、dat數據主要有read()、readlines()、readlines()、numpy.loadtxt()函數,導入的txt文件放在工作目錄temp中。

1. read() 函數

可以一次性讀取txt文件中的內容,并以字符串的結果返回來,如下列代碼所示:

with open("xyplot.dat", "r") as f:    #打開文件
    data = f.read()   #讀取文件
    print(data)

其中,

  • r是讀取人工書寫的數據,書寫的時候是什么樣子,讀出來就是什么樣。

  • rb是讀取二進制文件,非人工書寫的數據,如.jpeg等這些。

將該命令在Abaqus/CAE的命令行接口(Command Line Interface, CLI)運行后,結果如圖1所示(圖中#注釋后的亂碼為作者安裝abaqus采用英文版,沒有漢化所致):

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖1

圖1 read()讀取txt、dat數據到Abaqus

需要注意的是,以上data數據類型都是為字符,如下圖所示。調用data[0]為字符,因此data[0][0]也為字符,以及后續的data[20][0],data[60][0]等也都為字符。

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖2

2. readline()函數

readline()函數只讀取txt、dat文本第一行的內容,并以字符串的形式返回結果,其代碼如下所示

with open("xyplot.dat", "r") as f:      # 打開文件
    data = f.readline()                            # 讀取文件
    print(data)

將該命令在Abaqus/CAE的命令行接口(Command Line Interface, CLI)運行上述代碼后的顯示結果為圖2,很明顯只讀進去了第一行的內容。

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖3

圖2 readline()讀入txt、dat文件到Abaqus

3. readlines()

readlines函數能讀取txt、dat文本的所有內容,以數列的格式返回結果,并且配合for in使用,其代碼如下所示:

with open("xyplot.dat", "r") as f:
    for line in f.readlines():
        line = line.strip('\n')  #去掉列表中每一個元素的換行符
        print(line)

將該命令在Abaqus/CAE的命令行接口(Command Line Interface, CLI)運行上述代碼后的顯示結果為圖3。讀取data[0]、data[1]、data[1][1]、data[1][0]、data[1][2]、data[1][4]、data[1][0:4]的結果見圖3,大家可以看到其中的規律,特別是上述讀取的都是字符,如果想要得到數據類型,特別是有利于后面的循環讀取,需要將字符類型轉化為數據類型,這里采用float(data[1][0])將字符轉化為數據類型。

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖4

圖3 readlines()讀入txt、dat文件到Abaqus

讀寫txt文件時需要選擇r、w、rb、wb等的模式,其釋義如圖4所示:

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖5

圖4 Python讀寫txt、dat數據到Abaqus的模式解釋

4.numpy.loadtxt()

Abaqus里已經自帶安裝了numpy,無需要像python需要額外安裝numpy。

import numpy as np
b=np.loadtxt('coordinates.txt',delimiter = ',',dtype=np.float32)
print(b)

  • 第一行代碼主要為將numpy簡化等效為np,為了后續方便,比如np.loadtxt可直接等效為numpy.loadtxt,但長度是一樣的。

  • 第二行代碼讀入coordinates.txt(圖5),delimiter指定讀取文件中數據的分割符,在這里為逗號,;而后面dtype為指定讀取后數據的數據類型為float32類型。需獲取該txt文件,可在公眾號里回復:coordinates.txt

  • 第三行代碼在Abaqus里顯示b的內容如圖6所示,導入進去的b為一個array,其中忽略了逗號。在Abaqus里進行調用b的結果如圖7所示。注意到,b[0]為array中的第一行,b[1]為array中的第二行,b[0][0]為array中的第一行中的第一個元素,b[0][1]為array中的第一行中的第2個元素,b[1][0]為array中的第2行中的第一個元素,b[1][1]為array中的第2行中的第2個元素

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖6

圖5 coordinates.txt的內容

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖7

圖6 Abaqus顯示讀取coordinates.txt的內容

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖8

圖7 Abaqus里調用coordinates.txt的內容

說明:
  • 以上Python命令流既可以在Abaqus的命令行接口(Command Line Interface, CLI)直接運行,也可以通過在Abaqus/CAE的File菜單下,選擇Run Script...運行以上命令流保存的py腳本,兩種運行方式的運行結果完全相同。

以上即為本次推文的主要內容,如果想更深入的了解Python在abaqus中的應用,歡迎學習以下課程。

ABAQUS Python二次開發工程實例教程http://www.yqgqt.org.cn/college/video/c16214

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖9

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖10

基于Python向Abaqus導入txt、dat數據(附abaqus中python二次開發課程)的圖11

最后,有abaqus二次開發相關需求,歡迎通過微信公眾號聯系我們。

微信公眾號.jpg
登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

14
7
27