如何在另一行之前插入特定行,使用python将其插入到文本文件中,而不在任何行之间插入任何空行?

如何在另一行之前插入特定行,使用python将其插入到文本文件中,而不在任何行之间插入任何空行?,python,text,abaqus,Python,Text,Abaqus,我想从Abaqus输入文件中提取单元刚度矩阵。 文件最后几行的内容如下: ** ** OUTPUT REQUESTS ** *Restart, write, frequency=0 ** ** FIELD OUTPUT: F-Output-1 ** *Output, field, variable=PRESELECT *End Step 为了从输入文件中提取单元刚度矩阵,我们应在输入文件中插入以下行,即((*结束步骤))行之前的行: 我想通过python语言将这一行添加到我的输入文件中

我想从Abaqus输入文件中提取单元刚度矩阵。 文件最后几行的内容如下:

** 
** OUTPUT REQUESTS
** 
*Restart, write, frequency=0
** 
** FIELD OUTPUT: F-Output-1
** 
*Output, field, variable=PRESELECT
*End Step
为了从输入文件中提取单元刚度矩阵,我们应在输入文件中插入以下行,即((*结束步骤))行之前的行:

我想通过python语言将这一行添加到我的输入文件中,python语言是Abaqus软件的脚本语言。 我尝试在另一个文本文件中使用以下代码来测试此代码,但在执行这些行之后,在两行之间插入一个空行,我不希望这些空行:(在下面的代码中,我只想说明,其他代码创建空行)


此代码将完全满足您的需要:

with open('Input8.inp', 'r+') as f:
    _text = ''
    for line in f:
        if line.startswith('*End Step'):
            _text += '*ELEMENT MATRIX OUTPUT,ELSET=m,STIFFNESS=YES,MASS=NO,OUTPUTFILE=USER\n'

        _text += line

    f.seek(0)
    f.write(_text)
    f.truncate()
说明:

  • 以读写模式打开文件
  • 创建临时变量
  • 逐行迭代文件
  • 如果找到以“*结束步骤”开头的行,请将自定义行添加到temp变量中
  • 将迭代行添加到临时变量
  • 转到文件的开头
  • 向其写入临时变量
  • 删除文件中的其余行(不应该存在,但如果它们没有迭代,请删除它们)

  • 亲爱的Yaroslav,我不使用行((*Output)),我上面提到的代码只是一个示例。我使用最后一行,即((*结束步骤))我想在((*结束步骤))行之前添加((*元素矩阵输出,ELSET=m,STIFFNESS=YES,MASS=NO,OUTPUTFILE=USER))行。你能纠正一下你提到的代码吗?@Samanradnia,我已经逐行添加了代码解释,你真的不知道在哪里需要修改才能得到想要的结果吗?亲爱的Surzhikov,这很有效!非常感谢。
    import fileinput
    
    processing_foo1s = False
    
    for line in fileinput.input('Input8.inp', inplace=1):
      if line.startswith('*Output,'):
        processing_foo1s = True
      else:
        if processing_foo1s:
          print ('foo bar')
        processing_foo1s = False
      print (line,)
    
    with open('Input8.inp', 'r+') as f:
        _text = ''
        for line in f:
            if line.startswith('*End Step'):
                _text += '*ELEMENT MATRIX OUTPUT,ELSET=m,STIFFNESS=YES,MASS=NO,OUTPUTFILE=USER\n'
    
            _text += line
    
        f.seek(0)
        f.write(_text)
        f.truncate()