You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正ABAQUS Python脚本以导出所有帧位移与反力至Excel?

ABAQUS ODB文件位移与反力导出至Excel的脚本错误修正

我是Python脚本开发新手,手里有多个ABAQUS ODB文件,想编写Python脚本把所有ODB文件里所有分析步帧的位移(U)和反力(RF)导出到Excel。我写了如下脚本:

path = './'from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *
import random
from array import *
from odbAccess import openOdb
import odbAccess
import math
import numpy    
import os        # Operating system
import shutil    # copying or moving files
import numpy as np

# import database
odbname = 'BR_70_25mm-45HRD-F'
odb = session.openOdb(name = 'BR_70_25mm-45HRD-F.odb')
odb = session.odbs['BR_70_25mm-45HRD-F.odb']

part_instance = odb.rootAssembly.nodeSets['M_SET-5']
for key in keys:
   step = odb.steps[key]
   frameRepository = step.frames
   if len(frameRepository):
        for frame in frameRepository:
            print 'Id = %d, Time = %f\n'%(frame.frameId,frame.frameValue)
            fo = frame.fieldOutputs
            f1 = fo['U']
            f2 = fo['RF']
            HRF3 = np.array(f1)
            HU3 = np.array(f2)
            FD = np.hstack((HU3,HRF3))
            np.savetxt(path + odbname + '.csv', FD, delimiter=',')

运行时触发如下错误:

File "C:\SIMULIA\Abaqus\6.13-1\tools\SMApy\python2.6\lib\site-packages\numpy\lib\io.py", line 786, in savetxt
fh.write(format % tuple(row) + '\n')
TypeError: float argument required, not FieldOutput

请求协助修正脚本,完成数据导出工作。


错误原因

直接将FieldOutput对象转成numpy数组会失败,因为FieldOutput是节点/单元的场数据集合,需提取其中的数值分量;另外原脚本存在未定义变量keys、重复打开ODB、未处理多文件等问题。

修正后的完整脚本

# 导入必要模块
from odbAccess import openOdb
import numpy as np
import os

# 配置参数
path = './'  # ODB文件所在目录
output_suffix = '_U_RF.csv'  # 输出CSV后缀
target_node_set = 'M_SET-5'  # 目标节点集名称

# 获取目录下所有ODB文件
odb_files = [f for f in os.listdir(path) if f.endswith('.odb')]

for odb_file in odb_files:
    odb_name = os.path.splitext(odb_file)[0]
    print(f"正在处理文件: {odb_file}")
    
    # 打开ODB文件
    odb = openOdb(name=os.path.join(path, odb_file))
    
    # 获取目标节点集
    node_set = odb.rootAssembly.nodeSets[target_node_set]
    
    # 存储所有帧的数据
    all_data = []
    
    # 遍历所有分析步
    for step_name, step in odb.steps.items():
        # 遍历分析步下所有帧
        for frame in step.frames:
            frame_id = frame.frameId
            frame_time = frame.frameValue
            print(f"  处理分析步: {step_name}, 帧ID: {frame_id}, 时间: {frame_time:.4f}")
            
            # 获取位移U和反力RF场输出,并仅提取目标节点集的数据
            u_field = frame.fieldOutputs['U'].getSubset(region=node_set)
            rf_field = frame.fieldOutputs['RF'].getSubset(region=node_set)
            
            # 提取数值数据:U的三个分量(U1,U2,U3),RF的三个分量(RF1,RF2,RF3)
            u_data = np.array([(v.data[0], v.data[1], v.data[2]) for v in u_field.values])
            rf_data = np.array([(v.data[0], v.data[1], v.data[2]) for v in rf_field.values])
            
            # 合并数据:节点编号 + U分量 + RF分量 + 帧ID + 帧时间
            node_ids = np.array([v.nodeLabel for v in u_field.values]).reshape(-1,1)
            frame_info = np.full((len(u_data), 2), [frame_id, frame_time])
            frame_data = np.hstack((node_ids, u_data, rf_data, frame_info))
            
            # 添加到总数据列表
            all_data.extend(frame_data)
    
    # 将所有数据写入CSV文件
    if all_data:
        # 定义CSV表头
        headers = ['Node_ID', 'U1', 'U2', 'U3', 'RF1', 'RF2', 'RF3', 'Frame_ID', 'Frame_Time']
        # 转换为numpy数组
        all_data_np = np.array(all_data)
        # 写入文件:先写表头,再写数据
        output_path = os.path.join(path, odb_name + output_suffix)
        np.savetxt(output_path, all_data_np, delimiter=',', header=','.join(headers), comments='', fmt='%f')
        print(f"  数据已导出至: {output_path}")
    
    # 关闭ODB文件
    odb.close()

print("所有ODB文件处理完成!")

关键修改说明

  • 处理多ODB文件:通过os.listdir自动遍历目录下所有.odb文件,无需手动指定单个文件名
  • 正确提取场数据:使用getSubset(region=node_set)仅提取目标节点集的数据,再遍历values提取每个节点的分量数值(v.data)
  • 完善数据结构:添加节点编号、帧ID、帧时间等元数据,方便后续Excel分析
  • 修复ODB操作:避免重复打开ODB,处理完成后及时关闭文件
  • CSV写入优化:添加表头,统一数据格式,确保numpy能正确写入浮点数值

内容的提问来源于stack exchange,提问作者Mohammed Zoheb nawaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:53:14