Remplacer un mot ou un nombre dans un fichier

tptpt
Messages postés
6
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2008
- 14 nov. 2008 à 19:23
 Utilisateur anonyme - 16 nov. 2008 à 11:06
Bonjour,

Es-ce possible de remplacer un mot ou un nombre dans un fichier grace à python?

11 réponses

tptpt
Messages postés
6
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2008

15 nov. 2008 à 10:39
j'ai fais ce code, ça fonctione en partie, mais le fichier n'est pas recopier en entier, je supose qu'un caractère dans le fichier d'origine stop la copie!

# -*- coding: cp1252 -*-


import re


def multiwordReplace(text, wordDic):
    rc = re.compile('|'.join(map(re.escape, wordDic)))
    def translate(match):
        return wordDic[match.group(0)]
    return rc.sub(translate, text)


wordDic = {
'Knight_N': 'Amazon_N',
'Cavkgt_N': 'Amazon_N'}


file_entree = open('C:\ent_data.dat','r')
changedic=file_entree.read()
file_entree.close()


file_sortie = open('C:\ent_dataBis.dat','w')
change_file = multiwordReplace(changedic, wordDic)
file_sortie.writelines(change_file)
file_sortie.close()
0
Utilisateur anonyme
15 nov. 2008 à 14:31
pas besoin du module re

Il y a beaucoup plus simple

Utilise "replace"

Voila ce que dis la doc

* : <nobr><tt id=\"l2h-255\" xml=\"\" class=\"method\">replace</tt>(</nobr>, <var>old, new</var>[<var>, count</var>]<var></var>)

Return a copy of the string with all occurrences of substring
<var>old</var> replaced by <var>new</var>. If the optional argument
<var>count</var> is given, only the first <var>count</var> occurrences are
replaced.

source : http://www.python.org/doc/2.5.2/lib/string-methods.html
0
tptpt
Messages postés
6
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2008

15 nov. 2008 à 16:07
Merci, c'est plus simple, mais j'ai toujour le même problème, la copie s'arrête avant la fin du fichier!

voici le code modifié:

file_entree = open('C:\ent_data.dat','r')
changedic=file_entree.read(999999)
changedic = changedic.replace('Knight_N', 'Amazon_N')
changedic = changedic.replace('Cavkgt_N', 'Amazon_N')
file_entree = open('C:\ent_data.dat','w')
file_entree.write(changedic)
file_entree.close()
0
Utilisateur anonyme
15 nov. 2008 à 17:03
cela fonctionne chez moi

file_entree = open('test.txt','r')
changedic=file_entree.read()
changedic = changedic.replace('script', 'beuh')
changedic = changedic.replace('transitional', 'waouh')
file_entree = open('test.txt','w')
file_entree.write(changedic)
file_entree.close()
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tptpt
Messages postés
6
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2008

15 nov. 2008 à 17:25
Moi aussi pour les fichiers simples, mais pas pour ce fichier : http://perso.orange.fr/tptptmods/MaxTool/ent_data.dat 
il fait 14,7ko, et une fois copié ilne fais que 7ko, il manque la moitiée des lignes! 
0
Utilisateur anonyme
15 nov. 2008 à 17:42
Je n'ai pas windows, mais si tu le renommes simplement en txt, puis faire la manip et le renommer de nouveau en dat???

Dis moi si ca fonctionne.

Au cas où tout ça est à refaire, on pourra le rajouter dans le script
0
tptpt
Messages postés
6
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2008

15 nov. 2008 à 17:55
j'ai déjà essayé mais ça marche pas
0
Utilisateur anonyme
15 nov. 2008 à 18:25
Je crois, je ne peux pas être sur que les fichiers dat sont des structures de données et non des chaînes de caractères.

Je pense que tu devrais utiliser un outil comme pickle

Exemple :

http://www.linux-pour-lesnuls.com/python.php

Voir dans fichier d'entrée sortie.

doc en français de pickle :

http://quentel.pierre.free.fr/python-trad/module-pickle.html

Bon courage
0
Utilisateur anonyme
15 nov. 2008 à 18:34
Peut-etre s'ouvre-t-il avec le module csv

Voir csv.reader
0
tptpt
Messages postés
6
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2008

16 nov. 2008 à 10:44
Salut j'ai trouvé la solution!
ça doit venir de la façon de lire le fichier
Merci pour ton aide, voici le code, je doit pouvoir l'optimiser:

def ReplaceInFile(src):
    """Copy and replace data from src to src"""   
    fsrc = None
    fdst = None
    try:
        fsrc = open(src, 'rb')
        while 1:
            buf = fsrc.read(16*1024)
            buf = buf.replace('Knight_N', 'Amazon_N')
            buf = buf.replace('Cavkgt_N', 'Amazon_N')
            if not buf:
                break
            fdst = open(src, 'wb')
            fdst.write(buf)
    finally:
        if fdst:
            fdst.close()
        if fsrc:
            fsrc.close()
           
ReplaceInFile('C:\ent_data.dat')
0
Utilisateur anonyme
16 nov. 2008 à 11:06
Pourquoi avoir créer une fonction, ce n'est pas utile à moins d'avoir plusieurs fichiers à modifier

Je n'avais plus penser à la lecture binaire, c'etait donc bien le type de ton fichier qui en était le probleme. Il est de type binaire.

Tu peux aussi utiliser struct.unpack comme ci-dessous :

http://groups.google.com/group/fr.comp.lang.python/browse_thread/thread/5de47beb3e36adf6

L'essentiel ce que je dis toujours, c'est pas la perfection du programme qui n'existe pas, mais le fait qu'il reponde à ta demande. C'est déja pas mal
0