Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Chercher et remplacer dans un fichier

Chercher et remplacer dans un fichier

Remonter à Forum général Python
  • Chercher et remplacer dans un fichier

    Envoyé par dreadypelicang le 19 Mai 2009 à 21:53
    Bonjour,

    J'utilise Python pour faire une petite expérience de psychophysique. Le programe écrit donc dans un fichier de données de cette forme : chaque ligne représente les paramètres résultats d'un essai.
    Malheureusement, certains paramètres relatifs à un bloc d'essais ne sont mesurés qu'après la passation des dits essais.. et je ne sais pas comment, dans ce cas, rassembler ces données (écrire ces paramètres sur les lignes correspondant aux essais venant d'être passés).

    Du coup s'il existait une commande Python pour faire l'équivalent de "chercher et remplacer" dans un fichier de données, ça réglerait mon problème... mais je n'ai pas trouvé comment faire ça :(

    Est-ce que vous pourriez m'aider à le faire, ou à trouver une autre solution ?

    Merci d'avance !
    • Re: Chercher et remplacer dans un fichier

      Envoyé par jice le 20 Mai 2009 à 08:38
      Compte tenu de ta requête générale, je vais te donner des pistes générales :
      Il n'est pas possible de chercher et remplacer des données directement dans un fichier (et ce, dans n'importe quel langage).

      Par contre, il existe plein de solutions. tu peux soit :
      - Traiter ton fichier façon bourrin

      f = file("path/to/file.txt","r") # ouvrir le fichier
      chaine = f.read() # le charger dans une chaine de caractères
      f.close() # fermer le fichier
      result=chaine.replace("old", "new") # remplacer les données que tu souhaites
      f = file("path/to/file.txt","w") # ouvrir le fichier de sortie
      # en écriture Tu peux ouvrir le même si tu veux l'écraser
      f.write(result) # écrire le résultat dans le fichier
      f.close() # fermer le fichier


      Mais, si ton fichier est très gros, cela peut poser problème. Dans ce cas, tu peux aussi travailler ligne par ligne mais tu dois utiliser un fichier de sortie différent de celui d'entrée

      of = file("path/to/outfile.txt","w") # ouvrir le fichier de
      # sortie en écriture (forcément différent)
      for ligne in file("path/to/file.txt","r"):
      of.write(ligne.replace("old", "new")) # remplacer les données que tu souhaites
      of.close() # fermer le fichier de sortie


      Note que le code a été écrit de façon plus compacte, maintenant que tu es familiarisé avec la version longue du premier exemple ;) qui, en version courte, donne :

      result=file("path/to/file.txt","r").read().replace("old", "new")
      file("path/to/file.txt","w").write(result)


      Tu peux aussi faire des systèmes intermédiaires en stockant ton fichier dans une liste (si tu veux travailler par ligne et ne pas utiliser de fichier différent en sortie) avec

      liste=file("path/to/file.txt","r").readlines()


      Enfin, si le remplacement nécessite des expressions régulières, tu peux travailler avec le module "re"
    • Re: Chercher et remplacer dans un fichier

      Envoyé par dreadypelicang le 20 Mai 2009 à 10:23
      Super, merci !! :)
    • Re: Chercher et remplacer dans un fichier

      Envoyé par dreadypelicang le 26 Mai 2009 à 15:09
      Argh...
      Malheureusement ça ne marche pas dans le programme, par contre ça marche nickel en ligne de commande...
      Or en début de programme j'ai la ligne
      out = open(output_file, 'at')

      est-ce que c'est ça qui empêche de faire
      result=file(output_file,'r').read().replace('old', 'new')
      file(output_file,'w').write(result)
      ?
      Est ce que ça veut dire qu'il faut que je fasse un
      file(output_file,'at').close()

      ou je ne sais quoi à chaque fois ??

      Merci encore !
    • Re: Chercher et remplacer dans un fichier

      Envoyé par jice le 26 Mai 2009 à 17:28
      Qu'est ce qui ne marche pas exactement ?
      Peux-tu poster l'erreur ? ton programme (ou en tout cas la partie qui cloche) ?
      Si ça marche en ligne de commande mais pas en programme, c'est que probablement, le programme merdouille un peu. Je ne peux donc rien si je n'en sais pas plus.
      En tout cas, il est clair que tu ne peux pas ouvrir deux fois le même fichier en même temps.
    • Re: Chercher et remplacer dans un fichier

      Envoyé par dreadypelicang le 27 Mai 2009 à 18:04
      En fait il n'y a aucun message d'erreur... excepté que les remplacements ne sont pas faits ;)

      je vais déjà voir si ça marche en fermant/réouvrant le fichier à chaque fois...

      Merci !
    • Re: Chercher et remplacer dans un fichier

      Envoyé par jice le 29 Mai 2009 à 08:11
      Alors, ça donne quoi en ouvrant et en fermant ?
    • Re: Chercher et remplacer dans un fichier

      Envoyé par dreadypelicang le 9 Juin 2009 à 16:41
      Alors ça marche du tonnerre, je viens juste d'essayer.. merci beaucoup !
      Il fallait aussi rajouter des out.close() un peu partout..

      Par contre le fait qu'il faille faire appel à deux choses différentes pour écrire (avec open) et pour chercher/remplacer (avec read) me laisse assez circonspecte, mais puisque ça marche... :D
Rendu par Ploneboard