2017-10-07 29 views
1

我想從Abaqus輸入文件中提取單元剛度矩陣。是 的該文件的最後幾行的內容如下:如何在另一行之前插入特定行,並將其插入帶有python的文本文件中,而不在任何行之間插入任何空行?

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

以便從輸入文件中提取元件剛度矩陣,就要以下行輸入文件,即前行( (*結束步驟))線:

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

我想通過這ABAQUS軟件中的腳本語言Python語言這一行添加到我的輸入文件。 我嘗試下面的代碼到另一個文本文件來測試這段代碼,但是在執行這些行之後,在兩行之間插入一個空行,我不想要這些空行:(在下面的代碼中,我只是想表明的是,其他的代碼創建空行)

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

回答

2

此代碼將做的正是你需要的東西:

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. 迭代文件行
  5. 如果發現其中有「*結束步驟」開始線 - 自定義行臨時變量添加
  6. 添加重複行臨時變量
  7. 轉到文件開始
  8. 寫入臨時變量它
  9. 刪除文件其餘行(這不應該存在,但如果他們以某種方式,其中不重複 - 刪除)
+0

親愛的雅羅斯拉夫,我不使用該行((* Output)),我上面提到的代碼只是例子。我使用最後一行,即((* End Step)) – Samanradnia

+0

我想添加((* ELEMENT矩陣輸出,ELSET = m,STIFFNESS = YES,MASS = NO,OUTPUTFILE = USER) *結束步驟))行。你能否糾正你提到的代碼? – Samanradnia

+0

@Samanradnia,我已經逐行添加了代碼的解釋,你真的不知道你需要改變它來獲得所需的結果? –

相關問題