如何在另一行之前插入特定行,到带有 python 的文本文件中,并且不在任何行之间插入任何空行?

how to insert an specific line before another line, into a text file with python and without inserting any empty lines between any lines?

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

** 
** OUTPUT REQUESTS
** 
*Restart, write, frequency=0
** 
** FIELD OUTPUT: F-Output-1
** 
*Output, field, variable=PRESELECT
*End Step

为了从输入文件中提取单元刚度矩阵,我们应该将以下行添加到输入文件中,即 ((*End Step)) 行之前的行:

*ELEMENT MATRIX OUTPUT,ELSET=m,STIFFNESS=YES,MASS=NO,OUTPUTFILE=USER

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

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()

说明:

  1. 以读写模式打开文件。
  2. 创建临时变量
  3. 逐行迭代文件
  4. 如果找到以“*End Step”开头的行 - 将自定义行添加到临时变量
  5. 将迭代行添加到临时变量
  6. 转到文件开头
  7. 将临时变量写入其中
  8. 删除文件中的剩余行(不应存在,但以防万一它们不知何故未重复 - 删除它们)