IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[FICHIER] remplacement de caractére


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 54
    Par défaut [FICHIER] remplacement de caractére
    Bonjour,

    Je voudrais pouvoir modifier mon boot.ini afin de faire fonctionner un programme.
    Afin de faire cette manipulation j'ai voulu effectuer des tests, et j'ai donc créer un fichier test.txt situé directement sur C:/
    Voilà le contenue du fichier :
    [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professionnel" /fastdetect /NoExecute=OptOut
    Mon but est de remplacer le OptOut par alwaysoff afin de supprimer un plantage dut a un logiciel.

    J'ai donc voulu faire un script, mais je ne parvient pas à remplacer ce que je veux.
    J'ai tester un peu toutes les sources disponible sur internet mais rien n'y fait.

    Voici les deux sources que j'ai tester derniérement et je ne comprend pas pourquoi ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os
    f = file("c:/test.txt","r")    # ouvrir le fichier
    chaine = f.read()                   # le charger dans une chaine de caractères
    f.close()                           # fermer le fichier
    result=chaine.replace("OptOut", "alwayoff") # remplacer les données que tu souhaites
    f = file("c:/test.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()
    Mais j'ai beau l executer, rien ne se passe.Je n'ai pas de message d'erreur.

    J'ai donc essayé une deuxiéme méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    of = file("c:/outest.txt","w")       # ouvrir le fichier de 
                   # sortie en écriture (forcément différent)
    for ligne in file("c:/test.txt","r"):
        of.write(ligne.replace("OptOut", "alwaysoff"))  # remplacer les données que tu souhaites
        of.close()                             # fermer le fichier de sortie
    Mais la encore absolument rien n'y fait et je ne vois absolument pas pourquoi ....

    Est-ce que l'un d'entre vous pourrait me renseigner.
    Merci beaucoup.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En regardant rapidement ton code, je n'ai pas vu d'erreur flagrante.

    Une idée: peut-être y-a-t-il une protection de Windows pour empêcher d'écrire dans C:\ directement?

    Pour le vérifier: essaye de faire ta manip dans un répertoire situé dans ton home.

    Si tu veux faire ça directement avec boot.ini, sache qu'il y a un drapeau 'système' (S) et un drapeau 'caché' (H) qu'il faut désactiver avant et réactiver après. On le fait en console avec (on se met dans c:\):

    - pour désactiver: attrib -h -s boot.ini

    - pour réactiver: attrib +h +s boot.ini

    Je suppose qu'on peut utiliser ça dans un script avec os.system.

    Sauvegarde ton boot.ini avant la modif , et vérifie le boot.ini avant le reboot. Sinon, tu es bon pour la console de récupération (si tu as le CD! Sinon...).

    Tyrtamos

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    J’ai essayé ton premier code sans modification aucune, avec un fichier test.txt dans C:
    Sur mon ordi, ça marche.

    Pour que ton second code marche, il faut reculer d’un cran la ligne of.close()
    Une fois fait, ce code marche aussi.

    Comment se manifeste le fait que ça ne marche pas pour toi ?

    Par le fait que le fichier boot.ini n’est pas modifié et que le boot se produit encore de la même façon, donc avec un plantage ?

    Ou bien par le fait qu’un fois l’OS démarré, un fichier test.txt n’est pas modifié ?



    Soit dit en passant, à quel moment un fichier boot.ini est-il sollicité ?

    Car s’il est lu au moment du démarrage d’un ordinateur, je ne vois pas comment on peut espérer le modifier au démarrage par un code Python alors que l’OS n’est pas encore installé en mémoire vive.



    D’autre part:

    file(filename[, mode[, bufsize]])

    Constructor function for the file type, described further in section File Objects. The constructor’s arguments are the same as those of the open() built-in function described below.

    When opening a file, it’s preferable to use open() instead of invoking this constructor directly. file is more suited to type testing (for example, writing isinstance(f, file)).

  4. #4
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 54
    Par défaut
    En fait pour le moment je ne veux pas travailler directement sur le boot.ini je cherche a faire ce que je veux faire plus tard sur le boot.txt .
    autrement j'ai bien tester en désactivant et sa ne fonctionne pas.
    J'ai essayé dans d'autre repertoire et exactement pareil, le fichier n'est jamais modifier ....

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Essaye de voir ce qu’il se passe sur les chaînes avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os
    f = file("c:/test.txt","r")
    chaine = f.read()
    f.close()
    print repr(chaine)
    result=chaine.replace("OptOut", "alwayoff")
    print
    print repr(result)
    f = file("c:/test.txt","w")
    f.write(result)
    f.close()
    Ensuite, vois ce qu’il se passe en ouvrant et écrivant les fichiers en mode binaire:
    f = file("c:/test.txt","rb")
    f = file("c:/test.txt","wb")


    Puis tiens compte de la remarque de la doc et remplace ton utilisation de file() par open():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    f = open("c:/test.txt","rb")
    chaine = f.read()
    f.close()
    print repr(chaine)
     
    result=chaine.replace("OptOut", "alwayoff")
    print
    print repr(result)
    f = open("c:/test.txt","wb")
    f.write(result)
    f.close()

    Ajoute enfin des print ’quelque chose’ partout où cela te permettrait de suivre le déroulement.



    As-tu remarqué aussi qu’il manque ’s’ dans ’alwayoff’ ?

  6. #6
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 54
    Par défaut
    J'ai remarquer que je n'atteint pas le premier print car celui ci n'apparait jamais ....

    J'ai aussi virer la version 3.1 et remis la 2.6 mais ça ne fonctionne toujours pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer un caractère dans un fichier texte
    Par steelk dans le forum Excel
    Réponses: 36
    Dernier message: 29/01/2008, 15h10
  2. Réponses: 5
    Dernier message: 09/11/2007, 09h59
  3. Remplacé des caractères UTF8 erronés dans plusieurs fichiers
    Par evaisse dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 31/03/2007, 23h18
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. Réponses: 5
    Dernier message: 25/01/2005, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo