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

2024-10-02 22:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

我想通过python语言将这一行添加到我的输入文件中,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,)

Tags: 文件代码语言outputstepline矩阵单元
1条回答
网友
1楼 · 发布于 2024-10-02 22:31:01

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

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”开头的行,请将自定义行添加到temp变量中
  5. 向temp变量添加迭代行
  6. 转到文件开头
  7. 写入温度变量
  8. 删除文件中剩余的行(这不应该出现,但是如果它们不知何故没有被迭代-删除它们)

相关问题 更多 >