前面介绍了基于Python向Abaqus中导入txt、dat数据(基于Python向Abaqus导入txt、dat数据),这里研究如何基于Python从Abaqus导出数据到txt、dat。主要有这么几个函数:

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_.dat文件写入byte类型数组


01

write命令

使用write命令从abaqus导出数据到txt的代码及其生成的txt如下:

"qiuming.txt",

运行上述代码后,则将相关字符串导入到下面的txt文件中(见图1)。使用该命令后,若上述文件不存在,则系统自动创建。'a'表示可连续写入到文件,保留原内容,在原内容之后写入。可修改该模式为('w+','w','wb'等),而这些模式的解释可参考(基于Python向Abaqus导入txt、dat数据)。

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_python 保留一位小数_02

图1 write命令导出字符窜到txt文件里


02

numpy.savetxt命令

这个savetxt函数是基于numpy的,因此需要通过import numpy as np来调用np.save.txt,见图2最上面3行代码,如果不输入import numpy as np,则识别不了np。对于Python而言,需要安装这些numpy安装包才能发挥Python处理矩阵数组的强大优势。但其实在Abaqus里已安装好了这些Python的安装包了,所以可以直接以import numpy as np来执行numpy的相关命令。也可以说,完全可以把Abaqus当成一个Python的一个编译器来执行相关Python代码、调试Python程序,而只需要在Abaqus/CAE的命令行接口(Command Line Interface, CLI)来直接复制输入执行就行了(如插图所示),十分方便。

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_.dat文件写入byte类型数组_03

插图 Abaqus/CAE的命令行接口(就是Python编译器)

import numpy
  • arange是numpy里的一个函数,上述代码里的x = y = z = np.arange(0.0,6.0,1.0)主要表示生成的一维数组(从0.0开始,每次递增1.0,一直递增5次到5.0,但不包括6.0,总共6个数),也可以说是6X1的矩阵(其中,表示行或行分隔符的意思,总共6行1列),如图2运行所示:

图2  采用np.savetxt来导出txt文件

  • 第三行的x是变量名,表示需要存储到txt文件的这个数组数据;delimiter=','表示用,作为分隔符。第三行代码的输出内容如图3。

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_python 保留一位小数_04

图3 第三行代码的输出内容

  • 第4行的(x,y,z)表示需要存储到txt文件的数据,输出的结果如图4。注意到,为行分隔符,则x和y和z,三个各成1行。

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_.dat文件写入byte类型数组_05

图4 第4行代码的输出内容

  • 第五行的fmt='%1.4f'的解释如图5,简要说明就是输出数据格式,%1.4f表示定制为浮点型数据,制定小数点后的精度为4位,而整数部分为1位。图6可见第5行代码的输出内容。

图5  numpy.savetxt中fmt的解释

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_python 保留一位小数_06

图6  第5行代码的输出内容


python把dat文档数据换成二维数组并保存 python把数组写为dat文件_.dat文件写入byte类型数组_07

03

在ABAQUS的Python编译器中赋值整数的问题

在Abaqus里编译Python的时候需要注意一个问题,变量不要直接赋值整数,而且计算过程也不要直接用整数,否则计算出来的结果超乎你的想象!!!

不相信吧,这就举一个例子说服你!Abaqus 2020/CAE的命令行接口(Command Line Interface, CLI)(基于python的Abaqus二维草图绘制),其实可以当做安装好各种包的Python编译器,在其中编译如图7命令:

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_python 保留一位小数_08

图7 在Abaqus的Python编译里直接输入整数进行计算

你会很意外地发现,为什么4/10为0,这是因为4和10两个都是整数,计算出来的结果肯定也会保留整数,原本是0.4的,就只保留0这个整数。但如果你把4写成小数形式4.0,或把10写成小数形式10.0,或者两个都写成带0的小数形式,则计算结果也将是小数。因此,在Python编程过程中,最好将整数写成带0的小数形式,避免出现计算错误。特别是在大型模型或者编程里,一定要特别注意这个问题,否则你都不知道中间到底是怎么出错的!?

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_python 保留一位小数_09

但还需要注意的是,ABAQUS 6.13/6.14没有安装sympy和scipy等Python包,因此通过File/Run script无法运行需要导入这些包的Python文件如图8所示。但这里我安装的是ABAQUS 2020,运行这些是没有问题的。

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_.dat文件写入byte类型数组_10

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_.dat文件写入byte类型数组_11

图8 通过File/Run script无法运行Python包(在ABAQUS 6.13/6.14)


写在这次结尾的话,学代码最方便的方法、也是最高效的方法就是一句一句代码都仔细打出来运行看看每一句是什么结果,这也是为什么笔者要一句一句运行显示内容来给大家学习的原因。我相信,通过显示每一句的运行内容,透过对内容的分析理解,再结合相应的知识点或者从实操项目中的经验知识点,可以加速大家对于这块内容的掌握和理解。

还是那句话,“纸上得来终觉浅,绝知此事要躬行!!!”

其实代码还是很好玩的,正如打一门游戏,玩的就是心态。一望无际的草原、郁郁葱葱的树林、蔚蓝灵动的大海.......

python把dat文档数据换成二维数组并保存 python把数组写为dat文件_python 保留一位小数_12