0

我必须使用 txt 文件,为此我使用了以下代码:

inputFile = open("C:/Abaqus_JOBS/Job-M1-3_4.inp", "r") #CAE INPUT FILE

但是,当我在特定应用程序中运行此行以运行另一个程序中可用的 python 脚本时,我得到了这个错误。当我在 Spyder 中运行它时,我没有收到任何错误。

TypeError: an integer is required

我不知道为什么会发生此错误....

编辑:代码行直到有问题的行

import os
from os import *
from abaqus import *
from odbAccess import *
from abaqusConstants import *
import time
import itertools

os.chdir('C:\\Abaqus_JOBS')

LCKf = 'C:\\Abaqus_JOBS\\Job-M1-3_2.lck'
STAf = 'C:\\Abaqus_JOBS\\Job-M1-3_2.sta'

def get_num_part(s):
    for i in xrange(len(s)):
        if s[i:].isdigit():
            return s[i:]
    return ''

if not path.exists(LCKf):
    time.sleep(1)
while path.exists(LCKf) and path.isfile(LCKf) and access(LCKf, R_OK):
    variableX = 0
else:
    odb = openOdb(path='Job-M1-3_2.odb')
#get CF
#session.odbs[name].steps[name].frames[i].FieldOutput
    myAssembly = odb.rootAssembly    
    myAssemblyName = odb.rootAssembly.name

    nsteps=len(odb.steps.values())

    step1 = odb.steps.values()[nsteps-1]
    step1Name = odb.steps.values()[nsteps-1].name

    myInstanceName = odb.rootAssembly.instances.values()[0].name

    dCF3=[]
    dCF3v=[]
    coordFv=[]
    fileData = [] #array with the input file
    nodes = [] #array with the content of *NODES

    inputFile = open("C:/Abaqus_JOBS/Job-M1-3_4.inp", "r") #CAE INPUT FILE
    #fileData = variable with all the lines of the inp file
    for line in inputFile:
        fileData.append([x.strip() for x in line.split(',')])

错误是:

Traceback (most recent call last):
  File "c:/Abaqus_JOBS/results.py", line 47, in <module>
    inputFile = open("C:/Abaqus_JOBS/Job-M1-3_4.inp", "r") #CAE INPUT FILE
TypeError: an integer is required
4

1 回答 1

3

随着

from os import *

您正在导入os全局命名空间中的所有内容,包括os.open(). 不要这样做。

第二个参数flags在您提供单字符 string 时被定义为整数常量r。这基本上就是DSM 告诉你的和Lattyware 所说的。

open()默认情况下包含在 Python 中的全局命名空间中,这显然是您所期望的,但它是不同的:

注意:此函数适用于低级 I/O。对于正常使用,使用内置函数 open(),它返回一个带有 read() 和 write() 方法(以及更多)的“文件对象”。要将文件描述符包装在“文件对象”中,请使用 fdopen()。

于 2013-05-06T16:50:29.717 回答