如何在Abaqus / Python Scipting中从CSV文件读取数据

问题描述

我正在尝试使用脚本在abaqus中生成路径,但是我希望abaqus读取CSV文件并基于该路径生成路径,而不是手动将路径作为坐标输入,但是出现以下错误 TypeError:表达式;找到了“文件”,需要一个可识别的类型来填充字符串字典。 我了解该脚本不会确认输入文件,但不知道该如何修改? 我试图将CSV数据存储到Data.csv中,并且想在脚本中读取它时遇到错误错误指向以下行:

session.Path(name='point_list',type=POINT_LIST,expression=Data)

完整的代码是:

'''
 from abaqus import *
 from abaqusConstants import * 
 import __main__

 #def Macro2():




import section
import regionToolset
import displayGroupMdbToolset as dgm
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
import numpy as np
import job
import math
import os
import shutil
import csv
import sys

pressure_range={170e-3,70e-3,20e-3,120e-3}
void_range={2,4,6,8,10,12,14,16,17}
Thickness_range={8,20}


i=0
for void in void_range:
 for Thickness in Thickness_range: 

    for Pressure_mag in pressure_range:
        pressure_name=Pressure_mag*1000
        pressure_name= int(pressure_name)
        void_name=int(void)
        Thickness_name=int(Thickness)
        i=i+1
        J_name='Job-'+str(i)+'Void_size'+str(void_name)+'mm'+'Thickness'+str(Thickness_name)+'mm'+str(pressure_name)+'Kpa_ogd'
       

        ParentDir='W:/SAEed M/Abaqus results from nesI/1D_Model_3/Ver5/Model_3_ver5'+'/'
        JobDir=J_name+'/'+J_name+'.odb'
        JobDirectory=ParentDir+JobDir
        CSV_name=J_name+'.csv'
        CSVreadpath='W:/SAEed M/Abaqus results from nesI/1D_Model_3/Ver5/Model_3_ver5'
        #file=open(CSVreadpath,"r")
        with open ('Data.csv','r') as csv_file:
            Data=csv.reader (csv_file)

        



        


        o1 = session.openOdb(
            name=JobDirectory)
        session.viewports['Viewport: 1'].setValues(displayedobject=o1)
        session.Path(name='point_list',expression=Data)

'''

解决方法

正如@Anbu 提到的,csv.reader 不会返回您期望的内容。它 returns 一个行阅读器迭代器。即使只有一行,也必须使用迭代器。

如果您只想阅读第一行(正好有 3 个值),您可以执行以下操作:

with open('Data.csv','r') as csv_file:
    data = tuple(float(x) for x in next(csv.reader(csv_file)))

在此代码段中,next 返回 csv.reader 的第一次迭代的值,Abaqus 需要转换为 Tuple[float]