2017-10-07 3 views
1

Je souhaite extraire la matrice de rigidité d'un élément du fichier d'entrée Abaqus. le contenu des dernières lignes du fichier sont les suivants:comment insérer une ligne spécifique avant une autre ligne, dans un fichier texte avec python et sans insérer de lignes vides entre les lignes?

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

afin d'extraire la matrice de rigidité de l'élément à partir d'un fichier d'entrée, nous devrions la ligne suivante dans le fichier d'entrée, à savoir la ligne avant de la ((* End Step)) ligne:

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

Je veux ajouter cette ligne dans mon fichier d'entrée par le langage python qui est le langage de script de logiciels Abaqus. J'essaie le code suivant dans un autre fichier texte pour tester ce code, mais après l'exécution de ces lignes, entre deux lignes, il insère une ligne vide dont je ne veux pas cette ligne vide: (dans le code suivant, je viens de veulent montrer que, d'autres codes créent des lignes vides)

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

Répondre

2

Ce code va faire exactement ce dont vous avez besoin:

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

Explication:

  1. Ouvrir le fichier en mode lecture-écriture.
  2. Créer variable temp
  3. ligne de fichier Itérer par ligne
  4. Si la ligne trouvée qui commence par '* End Step' - ajoutez votre ligne personnalisé à température variable de
  5. Ajouter une ligne itéré à température variable de
  6. Aller à début du fichier
  7. variable Ecrire temp à elle
  8. supprimer les lignes restantes dans le fichier (qui ne devrait pas être présent, mais au cas où ils en quelque sorte où pas réitérait - les supprimer)
+0

Cher Yaroslav, je ne travaille pas avec la ligne ((* Sortie)), le code que j'ai mentionné ci-dessus était juste et exemple. Je travaille avec la dernière ligne, c.-à-d. ((* End Step)) – Samanradnia

+0

Je veux ajouter le ((* SORTIE MATRICE D'ÉLÉMENT, ELSET = m, RIGIDITÉ = OUI, MASS = NON, OUTPUTFILE = USER)) line befor the (((* Fin étape)) ligne. Pourriez-vous corriger le code que vous avez mentionné? – Samanradnia

+0

@Samanradnia, j'ai ajouté une explication de code ligne par ligne, vous ne savez vraiment pas où vous avez besoin de le changer pour obtenir le résultat souhaité? –