我正在编写一个python脚本来分析Abaqus(有限元软件)输出。该软件生成一个" .odb"具有预备格式。但是,由于Dassault(Abaqus软件的所有者)特别开发的python库,您可以访问存储在数据库内部的数据。 python脚本必须由软件运行才能访问这些库:
abaqus python myScript.py
然而,以这种方式使用新库真的很难,而且我不能让它运行matplotlib库。所以我想导出我在文件中创建的数组,稍后使用其他不需要使用abaqus运行的脚本访问它
为了操纵数据,我正在使用集合。例如:
coord2s11=defaultdict(list)
此数组在每个时间步骤存储一组节点的Z坐标及其应力值:
coord2s11[time_step][node_number][0]=z_coordinate
coord2s11[time_step][node_number][1]=stress_value
对于给定的时间步长,输出将为:
defaultdict(<type 'list'>, {52101: [-61.83229635920749, 0.31428813934326172], 52102: [-51.948098314163417, 0.31094224750995636],[...], 52152: [440.18335942363655, -0.11255115270614624]})
和glob(所有步骤时间):
defaultdict(<type 'list'>, {0.0: defaultdict(<type 'list'>, {52101: [0.0, 0.0],[...]}), 12.660835266113281: defaultdict(<type 'list'>, {52101: [0.0, 0.0],[...],52152: [497.74876378582229, -0.24295337498188019]})})
如果视觉上不愉快,它很容易使用!我使用:
在this file内打印了这个数组with open('node2coord.dat','w') as f :
f.write(str(glob))
我尝试按照我找到on this post的解决方案,但是当我尝试读取文件时,将值存储在新的词典中
import ast
with open('node2coord.dat', 'r') as f:
s = f.read()
node2coord = ast.literal_eval(s)
我最终得到一个SyntaxError: invalid syntax
,我猜这个数字来自defaultdict(<type 'list'>
。
有没有办法将数据存储在文件中,还是应该修改它在文件中的写入方式?理想情况下,我想创建我存储的完全相同的数组。
使用shelve创建数据库。这是一种简单快捷的方法。以下代码为我创建了db:
import os
import shelve
curdir = os.path.dirname(__file__) #defining current directory
d = shelve.open(os.path.join(curdir, 'nameOfTheDataBase')) #creation of the db
d['keyLabel'] = glob # storing the dictionary in "d" under the key 'keyLabel'
d.close() # close the db
&#34; with&#34;声明对我不起作用。 然后再打开它:
import os
import shelve
curdir = os.path.dirname(__file__)
d = shelve.open(os.path.join(curdir, 'nameOfTheDataBase')) #opening the db
newDictionary = d['keyLabel'] #loading the dictionary inside of newDictionary
d.close()
如果您收到错误
ImportError: No module named gdbm
只需安装gdbm模块即可。对于linux:
sudo apt-get install python-gdbm
更多信息here
答案 0 :(得分:0)
如果您有权访问shelve(我认为您会这样做,因为它是标准库的一部分),我强烈建议您使用它。使用shelve是一种存储和加载python对象的简单方法,无需手动解析和重构它们。
import shelve
with shelve.open('myData') as s:
s["glob"] = glob
用于存储数据。然后当你需要检索它时......
import shelve
with shelve.open('myData') as s:
glob = s["glob"]
就这么简单。