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 :

Problème fichiers texte Python


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Problème fichiers texte Python
    Salut les geeks ! (PLAGIAT)
    Bref, me voici sur ce forum car j'ai un soucis que je n'arrive pas à résoudre de mes propres moyens ..
    Je suis en Term S avec ISN. On vient de commencer l'année donc on a pas encore vu énormément de commandes python.
    J'ai un programme à rendre dont le but est simple, je m'explique : Créer un programme permettant de coder un texte. (et créer un programme permettant de décoder un texte). Tout ce qu'il y a de plus simple. Mais pour pimenter le tout, le prof nous à donné comme contrainte qu'il fallait aller chercher le texte à coder dans un fichier .txt et afficher le texte codé lui aussi dans un fichier .txt

    Mon problème est le suivant : J'utilise la commande open(coder,'w') pour créer mon fichier. Une fois qu'il est créé, j'écris dedans mon texte à coder et je relance mon programme. Soucis : cette commande écrase le fichier à chaque fois.. Comment je pourrais faire pour qu'une fois créé, le fichier ne s'écrase pas ?

    Merci de votre aide

    Voici mon programme c'est mon premier tout seul (comme un grand) alors la syntaxe risque de vous piquer les yeux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #VARIABLES & créations des fichiers texte
    coder = 'Entrez le texte à coder ici.txt'
    Fichier = open (coder,'w')
    Fichier = open(coder,'r')
    txtfin = 'Texte codé.txt'
    txt = open(txtfin,'w')
     # texttamer = (input ("Entrez le texte à coder : "))
    texttamer = Fichier.read()
    codeascii = 0
    codefin =  0
    n = 0
    longueurtexte = 0
    textefin = ""
    p=0
     
    #Recherche du nombre de caractères
    longueurtexte = len(texttamer)
     # print (longueurtexte)
    p = int(longueurtexte)
     
    #Boucle de cryptage caractère par caractère
    while (n<p) :
                    # print (ord(texttamer[n]))
                      codeascii = ord(texttamer[n])
                      n=n+1
                      codefin = (codeascii+2)
                      textefin = textefin+chr(codefin)
     
     
    Fichier.close()
     
    #Résultats  
     # print (textefin)
    txt.write (textefin)
    #INSTRUCTIONS
    print ("Ce programme nécessite d'être lancé deux fois pour fonctionner.")
    print ()
    print ("Si vous lancez ce programme pour la 1ère fois, suivez ces instructions : ")
    print ()
    print ("- Allez dans le répertoire où se trouve ce programme. Deux documents .txt se sont créés.")
    print ("- Entrez votre texte à coder dans <Entrez le texte à coder ici.txt>")
    print ("- Relancez le programme et vous aurez votre texte codé dans <Texte codé.txt>")
    print ()
    print ("Si vous lancez ce programme pour la 2nde fois, allez dans le fichier <Texte codé.txt> et récupperez votre texte codé.")
     
     # print (texttamer)


    Bonne soirée !

  2. #2
    Membre habitué

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    Allo, si ton but est de faire un update utilise le mode append.. tu peux tenter de voir avec ab+ a la place de w.

    open(file, "ab+")

    parce que w, wb, w+, wb+ va écraser à chaque fois ton fichier si il existe, ab+ lui va créer le fichier si il n'existe pas, et si il existe, va se positionner à la dernière ligne de ce dernier

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Relisez votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #VARIABLES & créations des fichiers texte
    coder = 'Entrez le texte à coder ici.txt'
    Fichier = open (coder,'w')  # écrase le fichier crée 
    Fichier = open(coder,'r')    # ouvre un fichier maintenant vide
    txtfin = 'Texte codé.txt'
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci geektoo, en utilisant la commande 'ab+' ça a marché.

    Wiztricks, (ne connaissant pas 'ab+') la seule façon de créer un fichier était 'w' . Et comme on voulait lire ce qu'il y avait dans ce fichier, j'ai rajouté 'r' .
    Dans ma tête ça semblait logique mais apparemment non

    En tout cas, merci et bonne journée

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonjour La Dime 11,

    Citation Envoyé par La Dime 11 Voir le message
    ... donc on a pas encore vu énormément de commandes python
    Le but n'est pas de connaître l'ensemble des instructions et des arguments à passer (n'essaie même pas !).

    Le bon réflexe est de fouiller la doc, l'officielle de préférence. Dans ton cas : https://docs.python.org/3/library/functions.html#open

    'a' open for writing, appending to the end of the file if it exists
    Car bien entendu, tu comprends suffisamment l'anglais.

    Bonne continuation

    edit : c'est un fichier texte, a priori pas de 'b' dans le mode d'ouverture du fichier.

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Citation Envoyé par f-leb Voir le message
    a priori pas de 'b' dans le mode d'ouverture du fichier.
    Donc si mon anglais est exceptionnel, j'ai compris que le 'b' servait pour le binaire mais comme je travaille en ASCII, un simple 'a+' suffirait ?
    C'est vrai que j'ai pas pensé à aller regarder la doc .. j'ai cherché sur google "Écrasement fichier texte python" et j'ai rien trouvé.. (c'est pourquoi j'ai posté mon problème ici).
    Je m'aventurerai dans la doc la prochaine fois

    Merci beaucoup

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Tant qu'à venir ici, tu trouveras aussi de la ressource en français sur Developpez. Par exemple sur les fichiers.
    Mais la documentation officielle (en anglais comme souvent) est la meilleure source d'informations, et il est toujours formateur de s'y frotter

  8. #8
    Membre habitué

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 110
    Points : 167
    Points
    167
    Par défaut
    Comme f-leb le dit, la doc est la meilleur place, Python est un langage facile a apprendre, mais tellement de possibilité, tu pourras pas t'en sortir sans la doc.

    Et oui, open(file, "a+") serait suffisant dans ton cas.

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    EHEHE, me revoilà !
    Merci pour vos réponses mais j'ai quand même un soucis (ET JE SUIS ALLé VOIR LA DOC ! )
    Bref, l'ouverture du fichier texte est nickel, mais c'est lors de la réécriture dans l'autre fichier.
    Certains mots peuvent être codés, d'autres non. J'ai deux hypothèses :
    - La table ASCII contient 257 caractères (il me semble) et si on ajoute +1, le programme ira chercher le caractère associé au code 258. = AUCUN.
    - Le fichier texte ne supporte pas certains caractères.

    Ce que j'ai souligné c'est des commandes que j'ai essayé de rajouter pour retourner au début de la table. en vain !


    Bonne soirée
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #Certaines variables ont été rendues muettes volontairement
    
    #VARIABLES & créations des fichiers texte
    coder = 'Entrez le texte à coder ici.txt'                 #Nom du fichier texte
    Fichier = open (coder,'a+')                               #Création du fichier texte en mode 'add', ce qui signifique qu'à chaque ouverture, on écrira à la ligne suivante
    Fichier = open(coder,'r')                                 #Lecture du fichier texte
    txtfin = 'Texte codé.txt'                                 #Nom du fichier dans lequel se trouvera le texte codé
    txt = open(txtfin,'w')                                    #ouverture du fichier en mode "write" pour écrire le texte codé
     # texttamer = (input ("Entrez le texte à coder : "))     #Instruction pour coder sur le Shell
    texttamer = Fichier.read()                                #Lecture du texte dans le fichier
    codeascii = 0                                             #Variable qui prendra le code ASCII de chaque lettre
    codefin =  0                                              #Variable qui donnera le code ASCII modifié 
    n = 0                                                     #Variable qui correspond au rang de chaque caractère du texte
    longueurtexte = 0                                         #Variable pour le nombre de caractères dans le texte
    textefin = ""                                             #Variable qui sera le texte codé
    p=0                                                       #Variable pour simplifier le programme, p prendra la valeur du nombre de caractères du texte
    q=1                                                       #Variable servant dans la moulinette de cryptage pour augmenter la difficulté de codage.
    #Recherche du nombre de caractères
    longueurtexte = len(texttamer)                            
     # print (longueurtexte)                                  #Afficher le nombre de caractères
    p = int(longueurtexte)                                    #On affecte la longueur du texte à la variable p
    
    #Boucle de cryptage caractère par caractère
    while (n<p) :
         # print (ord(texttamer[n]))
        codeascii = ord(texttamer[n])                         #On veut le code ASCII de chaque caractère un par un
        n=n+1                                                 #On ajoute un à n pour prendre le caractère suivant
        codefin = (codeascii)                               #On modifie le code ASCII du caractère en lui ajoutant la variable q
        if (codefin+q<255):
            codefin = (codeascii+q)
            q=q+1                                                 #On change la valeur q
            textefin = textefin+chr(codefin)                      #On prend notre texte et on lui affecte un nouveau code ASCII
        else :
            codefin = (codeascii+q-255)
            q=q+1
            textefin = textefin+chr(codefin)
    
    Fichier.close()                                           #Fermeture du fichier
    
    #Résultats  
     # print (textefin)
    txt.write (textefin)                                      #Ecriture dans le fichier texte
    #INSTRUCTIONS
    print ("Ce programme nécessite d'être lancé deux fois pour fonctionner.")
    print ()
    print ("Si vous lancez ce programme pour la 1ère fois, suivez ces instructions : ")
    print ()
    print ("- Allez dans le répertoire où se trouve ce programme. Deux documents .txt se sont créés.")
    print ("- Entrez votre texte à coder dans <Entrez le texte à coder ici.txt>")
    print ("- Relancez le programme et vous aurez votre texte codé dans <Texte codé.txt>")
    print ()
    print ("Si vous lancez ce programme pour la 2nde fois, allez dans le fichier <Texte codé.txt> et récupperez votre texte codé.")
    
     # print (texttamer)
    txt.close()                                               #Fermeture du fichier

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    C'est confus tout ça

    Déjà, en reprenant ton code de cryptage inclus dans une fonction :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def crypter(chaine):
        q = 1
        longueur_texte = len(chaine)                            
        chaine_cryptee= ""
        n = 0
        while (n < longueur_texte) :
            codeascii = ord(chaine[n]) 
            n = n + 1
            if (codeascii + q < 256):
                codefin = codeascii + q
            else :
                codefin = codeascii + q - 256
            # fin si            
            q = q + 1
            chaine_cryptee= chaine_cryptee+ chr(codefin)
        return chaine_cryptee

    Fais tes essais dans la console, du style :
    C'est bien le cryptage attendu ?

  11. #11
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    Alors oui, le cryptage marche bien, mais dès qu'on a un texte avec un peu trop de caractères, ça dépasse la table ASCII quand même..

    En codant "Je suis vraiment un mec trop gainé, c est ouf !" (merci de ne pas commenter) j'ai obtenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Kg#wzoz(|luzs}„1‡4‚{z8ŒŠŒ=…€‰ODˆFŒ›Jš¡“NP'
     
    'Kg#wzoz(\x7f|luzs}\x841\x87\x814\x82{z8\x8d\x8c\x8a\x8c=\x85\x80\x89\x8f\x0bOD\x88F\x8c\x9b\x9dJ\x9a¡\x93NP'
    Ce qui est impossible à écrire sur un fichier texte.. on voit bien que les 8/9 premiers caractères sont "normaux" et après, ça part en sucette !

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Vous pourriez avoir la curiosité de regarder ce que sont les caractères ASCII dans Wikipedia ou autre et constater que:
    • ASCII est un code dans 0..127 ("é" n'est pas là dedans),
    • tous les caractères ne sont pas imprimables/affichables

    => pourquoi transformer d'autres caractères que ceux entre 'a'..'z' et 'A'..'Z'?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    un test dans la console qui montre que tous les caractères ASCII ne sont pas "imprimables" :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> print ([(i, chr(i)) for i in range(256) if chr(i).isprintable()])

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/12/2005, 15h00
  2. Problème de réouverture de fichier texte
    Par EssaiEncore dans le forum Langage
    Réponses: 15
    Dernier message: 14/12/2005, 10h51
  3. problème ouverture fichier texte
    Par ice-t69 dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2005, 19h29
  4. [Debutant(e)] Problème fichier texte et vue
    Par solenn dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 21/07/2004, 09h23
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17

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