Pages : 1
#1 Le 15/12/2020, à 19: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, à 19: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, à 19: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, à 19: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, à 19: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, à 20: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, à 21: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, à 22: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, à 22:18)
Hors ligne
#9 Le 15/12/2020, à 22: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, à 22:35)
Hors ligne
#10 Le 15/12/2020, à 22:52
- chris7522
Re : Ouverture fichier (python)
Ok . Encore merci d'avoir pris le temps de toutes ces explications !
Hors ligne
#11 Le 16/12/2020, à 08: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, à 08:28
- Compte supprimé
Re : Ouverture fichier (python)
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, à 20: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, à 21: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, à 07:45
- chris7522
Re : Ouverture fichier (python)
Ok bien compris .
Merci
Hors ligne
#16 Le 17/12/2020, à 16: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.
Bref, l'essentiel c'est qu'en combinant les infos des différents messages tu atteignes ton but.
Hors ligne
#17 Le 17/12/2020, à 21: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
Pages : 1