2015-12-03 1 views
2

J'ai écrit un code en Python qui parcourt le fichier, extrait tous les nombres, les additionne. Je dois maintenant écrire le «total» (un nombre entier) à un endroit particulier dans le fichier qui indique something something something...Total: __00__ something something.Comment écrire à une position particulière dans un fichier texte sans effacer le contenu original?

Je dois écrire le total que j'ai calculé exactement après la partie Total: __, ce qui signifierait que la ligne résultante passerait à, par exemple: something something something...Total: __35__ something something.

Jusqu'à présent, j'ai ce pour la partie écriture:

import re 
f1 = open("filename.txt", 'r+') 
for line in f1: 
    if '__' in line and 'Total:' in line: 
     location = re.search(r'__', line) 
print(location) 

Ceci affiche: <_sre.SRE_Match object; span=(21, 23), match='__'>

Il trouve la « __ » à la position 21 à 23, ce qui signifie que je veux insérer la total à la position 24. Je sais que je dois en quelque sorte utiliser la méthode seek() pour ce faire. Mais j'ai essayé et échoué plusieurs fois. Toute suggestion serait appréciée.

Important: Le contenu d'origine du fichier doit être conservé tel quel. Seuls les changements totaux - rien d'autre.

Répondre

2

Si le fichier n'est pas particulièrement volumineux, vous pouvez lire son contenu sous la forme d'une liste de lignes remplaçant la ligne requise et réécrire le contenu. Quelque chose comme ceci:

with open(filename, "r+") as f: 
    lines = [line.replace("__00__", "__{}__".format(total)) 
      if "Total: __00__" in line else line 
      for line in f] 
    f.seek(0) 
    f.truncate() 
    f.writelines(lines) 
0

Cherchez ne sera utile que si vous ne changez pas la longueur du fichier avec l'opération (qui est la suivante: vous laissez assez d'octets dans le fichier à cet endroit pour écrire une valeur totale possible) . Sinon, vous devrez réécrire tous les octets du fichier qui suit ce point (car la plupart des systèmes de fichiers n'ont pas d'opération "insert" sur les fichiers).

Je suppose que ce que vous avez manqué est d'ouvrir le fichier dans le mode correct pour le réécrire.

f = open(filename,"r+b") 
f.seek(POSITION) 
f.write(DATA) 
f.close() 

Vous souhaitez ajouter une erreur appropriée vérifier ...