comment remplacer (mettre à jour) le texte dans un fichier ligne par ligne
Je suis en train de remplacer du texte dans un fichier texte par la lecture de chaque ligne, de le tester, puis l'écriture, s'il doit être mis à jour. Je NE veux PAS enregistrer comme un nouveau fichier, que mon script déjà sauvegarde les fichiers et fonctionne sur les sauvegardes.
Voici ce que j'ai jusqu'à présent... je reçois fpath à partir de l'os.marche() et je peux vous garantir que la pathmatch var renvoie correctement:
fpath = os.path.join(thisdir, filename)
with open(fpath, 'r+') as f:
for line in f.readlines():
if '<a href="' in line:
for test in filelist:
pathmatch = file_match(line, test)
if pathmatch is not None:
repstring = filelist[test] + pathmatch
print 'old line:', line
line = line.replace(test, repstring)
print 'new line:', line
f.write(line)
Mais ce qui finit par arriver, c'est que je ne reçois que quelques lignes (mis à jour correctement, vous l'esprit, mais il a répété plus haut dans le fichier) corrigé. Je pense que c'est un problème de délimitation de l'étendue, afaict.
*Aussi: je voudrais savoir comment remplacer uniquement le texte lors de la première instance du match, par ex., Je ne veux pas correspondre à l'affichage de texte, seul le sous-jacent href.
source d'informationauteur jml
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous voulez écrire la ligne si elle correspond à un modèle ou pas. Sinon, vous écrivez uniquement les paires de lignes.
Deuxième, entre la lecture des lignes et de l'écriture des résultats, vous aurez besoin soit de tronquer le fichier (peut
f.seek(0)
puisf.truncate()
), ou de fermer l'original et de le rouvrir. La cueillette de l'ancien, je finirais avec quelque chose comme:Un (relativement) de manière sûre pour remplacer une ligne dans un fichier.
(note: le présent document remplace les lignes entières seulement , et toutes les lignes qui correspondent dans le fichier)