Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/12/2020, à 20:22

chris7522

Ouverture fichier (python)

Bonjour  a toutes et a tous ,
  J'ai un repertoire 'Essai' dans lequel je me trouve .
Dans ce repertoire , j'ai le fichier ' chiffre.txt ' qui contient :

   3333
 3
                      9999
             43
           73
           22
                                          56

J'aimerai l'appeller dans mon fichier ' essai41.py ' qui se trouve lui aussi dans le repertoire ' Essai ' et contient :

def read_set(var):
    result = set()
    whith open(var) as file:
        for line in file:
            result.add(line.strip())
    return result
    
print(read_set('chiffre.txt'))

J'ai du oublier quelque chose puisque j'ai :

chris@chris:~/Bureau/Essai$ python3 essai41.py
python3: can't open file 'essai41.py': [Errno 2] No such file or directory
chris@chris:~/Bureau/Essai$ 

D'avance , merci de votre aide

Hors ligne

#2 Le 15/12/2020, à 20:33

beuguissime

Re : Ouverture fichier (python)

Bonsoir,

Vue l'erreur, tu te trompes en appelant ton script python (nom du fichier incorrect ou tu n'es pas dans le bon dossier).

Hors ligne

#3 Le 15/12/2020, à 20:36

chris7522

Re : Ouverture fichier (python)

Merci  de ta reponse . Il n'y a pas de module a importer ?

Hors ligne

#4 Le 15/12/2020, à 20:44

beuguissime

Re : Ouverture fichier (python)

Pour lire un fichier externe ? Non.

Par contre, je ferais la lecture du contenu ainsi :

result = [line.strip() for line in file.read().splitlines()]

Hors ligne

#5 Le 15/12/2020, à 20:45

chris7522

Re : Ouverture fichier (python)

Oups , je me suis planter dans la terminaison de mon script . Je suis fatigué moi , une soupe et au lit !
Merci de ton aide

Hors ligne

#6 Le 15/12/2020, à 21:09

chris7522

Re : Ouverture fichier (python)

Peux tu m'expliquer un peu plus en détail ta comprehension ?
Merci

Hors ligne

#7 Le 15/12/2020, à 22:20

beuguissime

Re : Ouverture fichier (python)

Oui bien sûr :

read() est une méthode du descripteur de fichier file, ça renvoie tout le contenu du fichier sous forme de string (car le open n'est pas fait en mode binaire)
splitlines() est une méthode de string, ça renvoie une liste des lignes (donc ça coupe partout où il y a un \n)
for file in machin itère sur les éléments de machin
strip() est une méthode de string, ça renvoie un string dépourvu des espaces de début et de fin

Hors ligne

#8 Le 15/12/2020, à 23:00

chris7522

Re : Ouverture fichier (python)

Ok Bien compris !
Je ne savais pas que l'on pouvait enchainer les méthodes ainsi :

in file.read().splitlines()

Il y a une limite ?

read() est une méthode du descripteur de fichier file, ça renvoie tout le contenu du fichier sous forme de string (car le open n'est pas fait en mode binaire)

Le open " n'est pas fait en mode binaire " , j'ai pas bien compris ...

Dernière modification par chris7522 (Le 15/12/2020, à 23:18)

Hors ligne

#9 Le 15/12/2020, à 23:34

beuguissime

Re : Ouverture fichier (python)

L'enchaînement des méthodes marchera tant que la méthode n+1 existe pour l'objet retourné par la méthode n (la précédente donc). Cumuler quelques méthodes peut rendre le code plus court mais demande un peu plus d'effort d'abstraction pour un humain qui voudrait lire le code. Trop de méthodes cumulées rendra le code difficilement déchiffrable (même par la personne qui l'a écrit).

Ce que je voulais dire c'est que tu ouvres le fichier en mode ASCII

open("fichier.txt")

sous-entend

open("fichier.txt", 'r')

Si tu veux ouvrir un fichier binaire (une image, une vidéo, une musique, etc), il faudra ouvrir ainsi :

open("fichier.txt", 'rb')

Note le 'b' pour binaire à côté du 'r' (qui veut dire lecture seule).

Et alors le retour de file.read() sera du type byte et non pas du type string.

Dernière modification par beuguissime (Le 15/12/2020, à 23:35)

Hors ligne

#10 Le 15/12/2020, à 23:52

chris7522

Re : Ouverture fichier (python)

Ok . Encore merci d'avoir pris le temps de toutes ces explications !
smile

Hors ligne

#11 Le 16/12/2020, à 09:04

chris7522

Re : Ouverture fichier (python)

Bonjour,
J'ai lu qu'il etait possible de le faire avec une compréhension d'ensemble aussi :

 def read_set_bis(var): 
               with open(var) as file:
                   return {line.strip() for line in file}

Hors ligne

#12 Le 16/12/2020, à 09:28

Compte supprimé

Re : Ouverture fichier (python)

chris7522 a écrit :

Bonjour,
J'ai lu qu'il etait possible de le faire avec une compréhension d'ensemble aussi :

Bonjour,
Oui mais le résultat ne sera pas le même. Une compréhension de set enlevera tous les doublons ...

#13 Le 16/12/2020, à 21:33

chris7522

Re : Ouverture fichier (python)

Bonsoir ,
Lorsque je fais ca , j'ai des doublons :

def read_set(var):
    result = set()
    with open(var) as file:
        for line in file:
            result = [line.strip() for line in file.read().splitlines()]
    return result
   
print(read_set('chiffre.txt'))

Et de cette facon , non :

def read_set_bis(var):
    result = set()
    with open(var) as file:
        for line in file:
            result = {line.strip() for line in file}
    return result
   
print(read_set_bis('chiffre.txt'))

Hors ligne

#14 Le 16/12/2020, à 22:23

pingouinux

Re : Ouverture fichier (python)

Bonsoir,
@chris7522 #13 :

Le résultat est de type list dans le premier cas (qui autorise les doublons), et de type set dans le second (qui les élimine).
Remarques :
- Il est inutile de définir result en tête des fonctions
- Il ne faut qu'une seule boucle sur le fichier dans chaque fonction

def read_set(var):
    with open(var) as file:
         result = [line.strip() for line in file.read().splitlines()]
    return result
   
print(read_set('chiffre.txt'))
def read_set_bis(var):
    with open(var) as file:
         result = {line.strip() for line in file}
    return result
   
print(read_set_bis('chiffre.txt'))

Hors ligne

#15 Le 17/12/2020, à 08:45

chris7522

Re : Ouverture fichier (python)

Ok bien compris .
Merci

Hors ligne

#16 Le 17/12/2020, à 17:18

beuguissime

Re : Ouverture fichier (python)

Désolé chris7522, je n'avais pas été attentif au fait que tu utilisais set, ça aurait pu m'indiquer que tu voulais une liste sans doublon mais tu aurais aussi pu expliciter plus ta demande au message 1. wink
Bref, l'essentiel c'est qu'en combinant les infos des différents messages tu atteignes ton but. wink

Hors ligne

#17 Le 17/12/2020, à 22:42

chris7522

Re : Ouverture fichier (python)

bonsoir,
   C' est vrai , mon 1 er message manquait de précision sur le résultat que je recherchais . Heureusement que je peux compter sur vos interventions pour me faire avancer .

Hors ligne