2010-06-17 6 views
2

Je veux écrire un code python qui ouvre un fichier texte et remplacer par un mot que je veux lui envoyer. Pouvez-vous me donner un exemple? Merci.Qu'est-ce que la fonction de remplacement en Python

+4

dans quelle mesure avez-vous avec ce que nous pouvons aider à corriger – AutomatedTester

+0

remplacer quoi? tout le contenu du fichier? – SilentGhost

+0

non pas tout le contenu du fichier. juste une partie du fichier qui a le mot de remplacement. –

Répondre

1

Il y a tellement de façons de le faire, mais assurez-vous de regarder Template Strings pour voir si elles sont bien adaptées à votre application.

De la documentation:

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 
>>> d = dict(who='tim') 
>>> Template('Give $who $100').substitute(d) 
Traceback (most recent call last): 
[...] 
ValueError: Invalid placeholder in string: line 1, col 10 
>>> Template('$who likes $what').substitute(d) 
Traceback (most recent call last): 
[...] 
KeyError: 'what' 
>>> Template('$who likes $what').safe_substitute(d) 
'tim likes $what' 
+0

qui ne gère pas le fichier lire et écrire! – Joschua

+0

@Joschua: Vrai. Il y a beaucoup d'autres réponses qui font cela, je pensais juste que le PO devrait être conscient qu'il y a des modules construits exactement pour ce cas d'utilisation. – Stephen

+0

hmm ok, mais je pense qu'il est un peu inappropié, d'utiliser un modèle "langage" truc pour juste remplacer un mot et l'enregistrer dans un fichier. – Joschua

0

Il peut être aussi simple que cela:

data = open('input_file').read() 
open('output_file', 'w').write(data.replace('old_word', 'new_word')) 

Une version plus propre:

fh = open('input_file') 
data = fh.read() 
fh.close() 

data = data.replace('old_word', 'new_word') 

fh = open('output_file', 'w') 
fh.write(data) 
fh.close() 
+0

+1 pour la version propre. –

+3

Ce fichier n'est plus valide. (http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files) et pourquoi mentionner une version malpropre? Un débutant devrait l'apprendre propre dès le début. – Joschua

+0

Alors, où exactement dans votre lien suggère-t-il que 'fichier' est obsolète? –

0

vous pouvez le faire de cette façon en utilisant le with-statement :

PATH = "/home/Eva/test.txt" 

with open(PATH) as f: # read the file content 
    content = f.read() 

with open(PATH, "w+") as f: # w+ stands for (re)write 
    content = content.replace("abc", "test") 
    f.write(content) 

(abc est le ancien texte, essai le nouveau texte, qui remplacera vieux)

Vous pouvez en savoir plus sur les fichiers here. J'espère que cela vous aide.

+0

-1: Ne faites pas ça. – nosklo

+0

Désolé, vous avez raison, je l'ai manqué totalement (édité pour fonctionner correctement) – Joschua

+0

problème de brassage - la première fois que vous avez ouvert le fichier, vous ne l'avez pas fermé explicitement et juste après oui, l'objet fichier sera fermé quand il ne sera plus utilisé mais c'est spécifique à l'implémentation et vous risquez que l'objet soit encore ouvert pendant que vous essayez d'ouvrir pour écrire –

2

surpris que MarteliBot n'a pas encore répondu :-) (je l'ai appris fileinput de lui ici dans un autre thread) - si pressé, vous pouvez effectuer les opérations suivantes:

import fileinput 
for line in fileinput.input('somefile.txt', inplace=1): 
    print line.replace('OldWord', 'NewWord'), 

ps. cela redirige en fait stdout vers le même fichier de manière sûre (c'est-à-dire écrit dans tempfile et renomme plus tard, etc.). n'est-ce pas joli?

0
sed s/oldword/newword/g originalfile.txt > fixedfile.txt

:-)

+0

Vous voudrez envelopper dans un appel 'subprocess.Popen'. – detly

Questions connexes