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 :

Lecture d'un fichier txt


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2023
    Messages : 12
    Par défaut Lecture d'un fichier txt
    Bonjour à tous,

    Alors je viens chercher votre aide pour un souci que je ne m'explique pas.
    J'utilise VS Code et lorsque je veux lire un fichier txt et générer une liste, celle-ci est vide.
    Si j'utilise le mode debug, la liste est bien générée. Et apothéose, si ensuite j'exécute de nouveau le script la liste s'affiche comme si elle était en cache.

    Tout fonctionne correctement avec une boucle for.

    Bien sur, j'ai vérifié le chemin du fichier, il n'est pas vide et cela fonctionne sur un autre poste.
    Sur le poste en cause, Windows a été réinstallé, VS code downgrader, les extensions de VS code désinstallées.

    Voici le code maléfique et très dur à comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open("notes.txt", "r", encoding="UTF-8") as filein:
        donnees = [ligne.rstrip() for ligne in filein]
    print(donnees)
    Merci de vos avis

  2. #2
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    Bonjour,

    Vous n'avez aucune erreur qui remonte dans la console au moment d'exécuter votre code ?
    Vous l'exécutez depuis VScode ? Depuis un terminal déporté?

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2023
    Messages : 12
    Par défaut
    Non, je ne rencontre aucune erreur lors de l’exécution du code sui se fait dans VS Code.
    Si je prends ce code et que je le fait tourner sur mon PC professionnel, pas de soucis de remontée de la liste

  4. #4
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    Il serait intéressant de savoir quel est le résultat si le code est exécuté depuis un terminal déporté (Powershell, cmd etc...).

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2023
    Messages : 12
    Par défaut
    Vu que c'est sur mon pc perso, t'essaie cela ce soir et je vous tiens au courant

  6. #6
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2023
    Messages : 12
    Par défaut
    Tout fonctionne correctement avec powershell et cmd

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    bonjour
    Citation Envoyé par fred13330 Voir le message
    Bien sur, j'ai vérifié le chemin du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open("notes.txt", "r", encoding="UTF-8")
    vos avis
    Et bien justement tu ne vérifies rien !
    On doit passer le chemin du fichier et pas que le nom du fichier. Sinon, python cherche le fichier dans le répertoire courant (de ton environnement bouton run, debug, console, hors Vscode...), et en fonction de l'environnement il peut avoir des différences.

    A voir aussi si ton code n'est pas dans un try..except trop large
    Et tu devrais avant de faire appel à nous, faire des tests avant ton code, par exemple afficher la taille du fichier et son contenu brut. (c'est cela vérifier)

  8. #8
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2023
    Messages : 12
    Par défaut
    Le code mis sur ce post est minimaliste.
    J'ai bien pris les précautions de savoir que mon fichier était bien lu. Si je garde le même environnement, le script fonctionne en mode debug, et comme je le dis (et toujours dans le même environnement), tout fonctionne avec une boucle for.

    Juste pour info, ces instructions permettent de lire un fichier de config qui va être remplacé, très prochainement) par un fichier yaml. Ceci est l'évolution de mon appli qui télécharge des vidéos sur youtube et modifie les tags MP après consulation de l'API Shazam.

    Donc, je ne me considère pas comme un roi de la programmation. Mais j'estime que si j'ai posté une demande aussi basique sur le forum, c'est que cela me paraissait très bizarre.

    Mais bon, je vais me débrouiller autrement

    Bonne journée

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 828
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par fred13330 Voir le message
    Donc, je ne me considère pas comme un roi de la programmation. Mais j'estime que si j'ai posté une demande aussi basique sur le forum, c'est que cela me paraissait très bizarre.
    Tout à fait, c'est très bizarre. Mais toute chose étant égale par ailleurs, la seule inconnue de ton code est le chemin d'accès vers le fichier. Nous on ne sait pas quel est ton environnement.
    Ainsi c'est ça qu'on te propose: tester ton code avec le chemin d'accès complet. C'est pas vraiment difficile d'écrire with open("c:\chemin\notes.txt", "r", encoding="utf-8") as fp: print(tuple(map(str.rstrip, fp))).

    Un autre détail: tu nous montres ce code, mais tu n'as pas dit si tu testes ce code seul ou bien ce code placé dans un code plus "large", code qui engloberait donc ce try/except mentionné par papajoker. On n'est pas dans ta tête, on ne peut pas le deviner.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Par défaut
    J'allais préciser que le chemin au fichier n'est pas donné et propose ici de donner le répertoire courant du fichier du test Python.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os
     
    directory_path = os.path.abspath(os.path.dirname(__file__))
     
    file_path = os.path.join(directory_path, "notes.txt")
     
    with open(file_path, "r", encoding="UTF-8") as filein:
        donnees = [ligne.rstrip() for ligne in filein]
    print(donnees)

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 828
    Billets dans le blog
    1
    Par défaut
    Ok le code est très simple et complet
    Et donc que donne-t-il donc ?

    Accessoirement il existe pathlib beaucoup plus souple et plus puissante pour gérer les chemins que os.path. Ainsi os.path.abspath(os.path.dirname(__file__)) s'écrira pathlib.Path(__file__).parent.absolute(). Et os.path.join(directory_path, "notes.txt") pourra s'écrire directory_path / "notes.txt" (l'opérateur mathématique "__div__" ayant été réécrit pour symboliser l'association entre les chemins.
    Et si tu rajoutes print(os.stat(file_path).st_size) ça t'affichera sa taille en octets (ça coûte pas grand chose et permet d'autres hypothèses)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    Citation Envoyé par fred13330 Voir le message
    Mais bon, je vais me débrouiller autrement
    Puisque l'on ne connait pas ton code on ne pas deviner !

    comme dit plus haut
    - tu peux avoir des try..except qui masque que le fichier n'est pas trouvé
    - ton code présenté peut ne pas être exécuté, par exemple si tu as dans une autre partie de ton code une chose du type if fichier_config.exists() : ou if config.not_set() :.

    Comme écrit plus haut, il suffit de mettre 1..2 print() juste avant ce code pour voir si le fichier est trouvé (bien lu) et si cette portion de code est bien exécutée.
    Le format du fichier ne change rien et donc en changer ne va rien changer

    Comme dit plus haut, passer le chemin est la bonne pratique, ne pas le faire est une mauvaise pratique :
    - le script peut-être lancé depuis un menu/icone (donc le répertoire courant est aléatoire)
    - debug vscode : par defaut le répertoire courant est celui du projet donc pas forcément celui du script, mais peut-être aussi un répertoire particulier suivant notre config. (tu indiques nulle part comment tu lance ton script hors debug ...)
    - il est simple d'écrire une petite ligne de code plutôt d'exiger que l'utilisateur fasse à chaque fois un "cd repertoire" avant de lancer le script (ou de créer en rustine un fichier .bat qui va dans le bon répertoire - fichier rustine qui demande autant de code donc sans intéret)

    Mettre une ligne en debut de script type print("dir:", Path.cwd().absolute()) n'est quand même pas difficile si on a des doutes.

    Ce genre de petit problème comme le tien est courant, et nous devons impérativement savoir comment vérifier d'où vient l'erreur. La seule bonne vérification, c'est d'ajouter 2..3 lignes pour faire quelques tests basiques.

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

Discussions similaires

  1. lecture d'un fichier txt ligne par ligne
    Par SoBaKa dans le forum Général Python
    Réponses: 4
    Dernier message: 06/03/2007, 12h02
  2. Lecture depuis un fichiers txt
    Par mask91 dans le forum C++
    Réponses: 15
    Dernier message: 04/03/2007, 22h40
  3. Réponses: 4
    Dernier message: 13/11/2006, 22h30
  4. Lecture et ecriture fichier txt
    Par jeanmy dans le forum Delphi
    Réponses: 12
    Dernier message: 07/08/2006, 17h23
  5. [debutant] lecture d'un fichier txt de 10mo
    Par karamazov994 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 19/04/2005, 15h55

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