Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ouvrire un fichier : python

26 novembre 2019 à 20:01:11

Écrire une fonction wc(nomFichier) qui ouvre le fichier en question et renvoie un tuple de trois nombres :

  • le nombre de caractères (y compris les caractères de retour à la ligne)

  • le nombre de mots

  • le nombre de lignes


CONSIGNE 

  • Nous définissons ici un mot comme étant une chaîne de caractères alphanumériques, c’est-à-dire répondant True à la méthode isalnum(), et maximale, c’est-à-dire entourée d’espaces ou de séparateurs ou de caractères de fin de phrase.

  • Les fichiers utilisés par UpyLaB pour tester la fonction sont accessibles aux adresses suivantes :

    Pour information, le premier fichier contient les caractères a2x!§t5\n (\n désignant le caractère de fin de ligne). L’appel de la fonction sur ce fichier retourne donc le tuple (8, 2, 1), les deux mots étant a2x et t5.

    Notez que le fichier le-petit-prince.txt est libre de droit d’auteur sauf en France (voir https://fr.wikipedia.org/wiki/Le_Petit_Prince). Si vous habitez en France, vous ne pouvez donc légalement le télécharger, mais aucun souci ailleurs dans le monde.

  • Vous pourriez être tenté d’utiliser la méthode split. Ce n’est peut-être pas une très bonne idée, car la liste des séparateurs est ici très longue. Par exemple, le fichier pourrait contenir la chaîne

    "a$€αω$BOjJOurα"
  • Partager sur Facebook
  • Partager sur Twitter
26 novembre 2019 à 20:22:50

Le principe des exercices, c'est d'essayer de les faire, pas de les poster sur les forums pour que d'autres fassent le boulot.
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

27 novembre 2019 à 6:12:52

 je n'ai jamais fait ça ua paravent, j'ignorer même qu'on pouvait ouvrir un fichier avec python , mais si tu y tiens : voilà 

def wc(nomFichier):

    Fichier = open('/pub/data/wc1.txt','wb')
    return Tuple ()
  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2019 à 8:50:43

C'est pas comme ça :)

Allez un coup de pouce :

def wc(nomFichier):
 
    with open("/pub/data/wc1.txt",'r') as file:  # pour la lecture il faut ouvrir en mode "r" (valeur par défaut)
        contenu = file.read()  # ça donne un string
        longueur = len(contenu)  # la longueur
        nb_mots = ?   # à toi de compléter
        nb_lignes = ?  # à toi de compléter
        return longueur, nb_mot, nb_lignes  # c'est comme ceci que l'on retourne un tuple



  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2019 à 17:11:36

PradaSmith a écrit:

 je n'ai jamais fait ça ua paravent, j'ignorer même qu'on pouvait ouvrir un fichier avec python , mais si tu y tiens : voilà 

def wc(nomFichier):

    Fichier = open('/pub/data/wc1.txt','wb')
    return Tuple ()


Ça sent la bonne volonté dis donc.

Mais honnêtement tu nous aurais présenté ça, déjà ça montre que tu as fait quelques recherches, puisque tu as trouvé comment ouvrir un fichier.

Après si tu bloques sur un truc particulier, on peut guider, par exemple sur le comptage des mots qui me semble être le truc le plus dur à faire dans cet exercice.

EDIT : Le fait que tu aie posté plein de sujets en nous balançant juste l'énoncé des exercices joue beaucoup dans ma remarque, hier j'en ai vu 4 postés par toi, ça sent juste le mec qui veut qu'on fasse ses devoirs à sa place.

-
Edité par LoupSolitaire 27 novembre 2019 à 17:13:59

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

27 novembre 2019 à 18:00:12


Bonsoir désoler pour le retard ça peut pas être ça car il me demande de lire 3 fichier et comment peut-je avoir le nombre de mots ? regarder les txt ci-dessous 


  • Nous définissons ici un mot comme étant une chaîne de caractères alphanumériques, c’est-à-dire répondant True à la méthode isalnum(), et maximale, c’est-à-dire entourée d’espaces ou de séparateurs ou de caractères de fin de phrase.

  • Les fichiers utilisés par UpyLaB pour tester la fonction sont accessibles aux adresses suivantes :

    Pour information, le premier fichier contient les caractères a2x!§t5\n (\n désignant le caractère de fin de ligne). L’appel de la fonction sur ce fichier retourne donc le tuple (8, 2, 1), les deux mots étant a2x et t5.

  • Partager sur Facebook
  • Partager sur Twitter
27 novembre 2019 à 18:41:14

Si j'ai bien compris l'énoncé, le programme (la fonction) ne dois lire qu'un seul fichier, les trois sont donnés pour tester le programme sur différents jeux de données.

-
Edité par LoupSolitaire 27 novembre 2019 à 18:42:19

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 4:11:39

ah bon ? parce que quand j'essaye avec un seul fichier ça me met ça : 
Résultat attendu pour wc('/pub/data/wc1.txt') : (8, 2, 1)
Résultat attendu pour wc('/pub/data/le-petit-prince.txt') : (82650, 15317, 1550)
Résultat attendu pour wc('/pub/data/Zola.txt') : (1356, 219, 1)



  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 13:22:03

Ça paraît correct comme résultat.
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 16:12:16

du coup 

def wc(nomFichier):
  
    with open("/pub/data/wc1.txt",'r') as file:  # pour la lecture il faut ouvrir en mode "r" (valeur par défaut)
        contenu = file.read()  # ça donne un string
        longueur = len(contenu)  # la longueur
        nb_mots = True   # à toi de compléter
        nb_lignes = 1  # à toi de compléter
        return longueur, nb_mots, nb_lignes  # c'est comme ceci que l'on retourne un tuple



-
Edité par PradaSmith 28 novembre 2019 à 16:22:14

  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 16:17:39

Ça donne quoi quand tu exécutes cette fonction ?
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 16:21:57

Résultat attendu pour wc('/pub/data/wc1.txt') : (8, 2, 1)

Résultat attendu pour wc('/pub/data/le-petit-prince.txt') : (82650, 15317, 1550)

  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 16:29:54

Pourquoi tu mets True et 1 ? x)
  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 16:46:47

PradaSmith a écrit:

Résultat attendu pour wc('/pub/data/wc1.txt') : (8, 2, 1)

Résultat attendu pour wc('/pub/data/le-petit-prince.txt') : (82650, 15317, 1550)


C'est pas le résultat produit par ton programme ça, c'est le résultat attendu.

Je comprend pas comment tu récupères ça, c'est pas ton code qui le produit, quand j'essaie chez moi ça donne ça sur le premier fichier :

$ python3 wc.py
(8, True, 1)

Apparemment vous utilisez UpyLab, il doit y avoir indiqué si le résultat produit correspond à ce qui est attendu ou pas.

EDIT : Poste une capture d'écran sinon.

-
Edité par LoupSolitaire 28 novembre 2019 à 16:51:20

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 17:11:36

tu programme sur quoi ?  j'ai un problème alors avec python aucun erreurs rien et c'est chiant jpeut pas tester 

def wc(nomFichier):
 
    with open("/pub/data/wc1.txt",'r') as file:  
        contenu = file.read() 
        longueur = len(contenu)  
        nb_mots = 2  
        nb_lignes = 1  
        return longueur, nb_mots, nb_lignes 

Comment je fais pour les 2 autres j'ai essayer de refaire un with open : identique a la précédente et changer Les nb mais sa fonctionne pas 

  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 17:20:07

PradaSmith a écrit:

tu programme sur quoi ?

J'ai juste écrit le code dans un fichier, j'ai téléchargé le fichier wc1.txt et je l'ai mis dans le même dossier, et j'ai lancé le programme dans une console (la première ligne c'est la commande que j'ai lancé, ça fait pas partie du résultat affiché par le programme.

C'est pas étonnant que tu ait du mal à apprendre si tu peux pas tester correctement ton code.

Selon ton système tu as juste besoin d'un éditeur de texte adapté à la programmation (un truc simple comme notepad++ fera l'affaire, tu peux aussi coder avec l'éditeur de texte de IDLE qui doit être fourni avec Python).

J'ai trouvé un lien qui explique bien comment utiliser IDLE : https://www.pitt.edu/~naraehan/python3/getting_started_win_first_try.html

C'est en anglais mais il y a une vidéo, n'hésite pas s'il y a des choses qui sont pas claires. Avec les bons outils on gagne un temps fou.

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 18:43:47

non je sais utiliser IDLE ... j'ai regarder la video mais je sais déjà tout ça mais moi le problème je pense que c le code parceque quand je fait entrer IDLE passe a la ligne laisse une ligne vide et je suis obliger de re appuiyer entrer mais après ça n'affiche rien
  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 18:57:20

PradaSmith a écrit:

non je sais utiliser IDLE ... j'ai regarder la video mais je sais déjà tout ça mais moi le problème je pense que c le code parceque quand je fait entrer IDLE passe a la ligne laisse une ligne vide et je suis obliger de re appuiyer entrer mais après ça n'affiche rien

Faudrait une capture d'écran pour qu'on sache ce que tu as tapé et pourquoi ça n'affiche rien.
  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 19:18:38

tu peut juste m'aider a finir ? le programme on y es presque mais j'aimerais savoirs comment fr pour refaire la mm manipulation avec les deux autres texte ?
  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 19:38:13

Autant pour moi, il fallait utiliser le paramètre ...

def wc(nomFichier):
   
    with open(nomFichier, mode="r") as file:  # pour la lecture il faut ouvrir en mode "r" (valeur par défaut)
        contenu = file.read()  # ça donne un string
        longueur = len(contenu)  # la longueur
        nb_mots = ?   # à toi de compléter
        nb_lignes = ?  # à toi de compléter
        return longueur, nb_mots, nb_lignes  # c'est comme ceci que l'on retourne un tuple


par contre pour nb_mots et nb_lignes il faut que tu trouve un petit algo ...

-
Edité par thelinekioubeur 28 novembre 2019 à 19:39:03

  • Partager sur Facebook
  • Partager sur Twitter
28 novembre 2019 à 20:14:42

PradaSmith a écrit:

j'aimerais savoirs comment fr pour refaire la mm manipulation avec les deux autres texte ?

Dans la consigne il faut écrire une fonction qui traite un fichier, pour en traiter plusieurs il suffit d'appeler la fonction avec le nom d'un autre fichier, le reste ne change pas.

Mais j'ai pas l'impression qu'on te demande d'écrire un programme complet pour traiter les trois fichiers, juste une fonction capable de traiter un fichier.

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

28 novembre 2019 à 21:41:25

Ah j'ai compris c bon c fait j'ai fait ça : 

def wc(nomFichier):
    with open(nomFichier,'r') as file:  
        contenu = file.read()  
        longueur = len(contenu) 
        nb_mots = 219
        nb_lignes = 1
        return longueur, nb_mots, nb_lignes
        

Mais le problème que j'ai c'est que ça renvoie une reponse vraie en fonction de nb mots et lignes écrits j'ai donc essayer plusieur truc genre input() et intinput et tt mais ça ne marche pas de façon général ? que doit je faire 

sachant que nb mots et lignes doit renvoyer c'est trois resultat 

le petit prince (82650, 15317, 1550) 
Zola.txt') : (1356, 219, 1)
wc1.txt') : (8, 2, 1)




  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2019 à 10:17:28

Evidemment que ça ne fonctionne pas dans le cas général.

Il faut que tu trouve un algo qui compte le nombre de mots et le nombre de lignes.

Je t'ai déjà donné la solution pour la longueur, je ne vais pas tout faire non plus ...

  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2019 à 13:33:55

def wc(nomFichier):
    
    with open(nomFichier,'r') as file:  
        contenu = file.read()  
        longueur = len(contenu) 
        prec, nb_mots = ' ', 0
        for char in contenu:
            nb_mots += int(prec == ' ' and char != ' ')
            prec = char
        return nb_mots
        nb_lignes = 0
        while fd.readline():
            nb_lignes += 1
        return longueur, nb_mots, nb_lignes
  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2019 à 13:56:32

Tu as testé ? (non)

Pour nb_mots ça m'a l'air bien à part que tu ne prends pas en compte les retours à la lignes, la ponctuation etc... (je ne sais pas s'il y en a)

Pour nb_lignes ça ne peut pas marcher, tu utilise une variable non déclarée (fd).

-
Edité par thelinekioubeur 29 novembre 2019 à 13:57:07

  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2019 à 15:35:19

PradaSmith a écrit:

prec, nb_mots = ' ', 0
  for char in contenu:
    nb_mots += int(prec == ' ' and char != ' ')
    prec = char
return nb_mots

Attends, c'est toi qui a écrit ce bout de code ?

Parce que si oui, j'arrive pas à comprendre que tu puisses sortir un hack qui profite du fait qu'en Python, les booléens True et False valent respectivement 1 et 0 quand ils sont convertis en int alors qu'à côté de ça tu as du mal avec des concepts moins avancés au point de faire appel à des variables qui n'existent pas dans ton code ?

C'est un coup de bol où tu copie des bouts de code que tu comprends pas et tu essaie de les combiner ensemble ?

Parce si c'est le deuxième cas, arrête tout de suite, tu ne vas jamais progresser si tu essaie de combiner des trucs au hasard sans comprendre ce que tu fais.

EDIT : En fait je suis convaincu que c'est de la copie de bouts de code trouvés ailleurs, ligne 12 on voit un fd.readline().

fd pour File Descriptor, une abbréviation souvent utilisée par les programmeurs expérimentés, mais jamais par les débutants, encore moins les débutants francophones.

Donc je réitère : arrête tout de suite, tu n'arriveras à rien en collant ensemble des bouts de code que tu ne comprends pas.

Reprends ton cours (au moins une relecture rapide), les bases, les variables, les conditions, les boucles, les fonctions, fais un ou deux exercices rapides pour voir si tu arrives à mettre en oeuvre ces concepts, et ça devrait déjà pas mal t'aider.

En programmation copier le code des autres ne te sauvera pas, si tu comprend pas ce que tu fais ça saute aux yeux, et ça donne un code de merde et qui marche pas.

-
Edité par LoupSolitaire 29 novembre 2019 à 15:41:02

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

29 novembre 2019 à 16:53:33

En programmation copier le code des autres ne te sauvera pas, si tu comprend pas ce que tu fais ça saute aux yeux, et ça donne un code de merde et qui marche pas.

 hého arrête de critiquer mon travaux parceque jte jure j'essaye de comprendre se que vous me ditent mais vous parler chinois '^^ je comprend a moitié se que vous me dite, j'ai passer 2h sur le sujet j'ai publier récemment ,et j'étais obliger clos car a chaque fois que tu me donner un indice bah ça compliquer ma compréhension . lol 

def wc(nomFichier):
    
    with open(nomFichier,'r') as file:  
        contenu = file.read()  
        longueur = len(contenu) 
        nb_mots= contenu.isalnum()
        nb_lignes = contenu.split
        return longueur, nb_mots, nb_lignes
        


il me semble il faut j'use .isalnum()

ou l'autres code ? 

def wc(nomFichier):
     
    with open(nomFichier,'r') as file: 
        contenu = file.read() 
        longueur = len(contenu)
        prec, nb_mots = ' ', 0
        for char in contenu:
            nb_mots += int(prec == ' ' and char != ' ')
            prec = char
        return nb_mots
        nb_lignes = 0
        while longueur.readline():
            nb_lignes += 1
        return longueur, nb_mots, nb_lignes
  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2019 à 17:14:55

Teste tes codes avant de les poster ici, isalnum n'a rien à voir avec la choucroute.

Et va lire un cours surtout.

  • Partager sur Facebook
  • Partager sur Twitter
29 novembre 2019 à 18:06:58

PradaSmith a écrit:

 hého arrête de critiquer mon travaux parceque jte jure j'essaye de comprendre se que vous me ditent mais vous parler chinois '^^ je comprend a moitié se que vous me dite, j'ai passer 2h sur le sujet j'ai publier récemment ,et j'étais obliger clos car a chaque fois que tu me donner un indice bah ça compliquer ma compréhension . lol 

On sent bien que tu essaie, pas de soucis là-dessus.

Le truc c'est qu'au début on ne connaissait pas ton niveau, donc on donnait sans doute des conseils que tu ne pouvais pas comprendre ou qui t'on embrouillés.

Mais au fur et à mesure des discussions on découvre qu'il te manque des prérequis très basiques, et que tant que tu les auras pas, tu pourras pas avancer sur le reste.

C'est pas pour te faire chier, au contraire, tu peux continuer à t'épuiser sur des exercices trop durs pour toi, ou alors tu peux reprendre les bases qui te manquent (les notions de variables et leurs type, les fonctions et leurs paramètres et valeurs de retour, etc...).

Si le cours que t'as donné ton prof ne te convient pas, tu peux en essayer un autre, il y en existe plein :

Au passage, tu n'es pas toujours facile à comprendre quand tu t'exprimes en français, je sais pas si c'est ta langue maternelle ou si tu as des problèmes type dyslexie, mais si tu peux te relire, ça aide parce que parfois il manque carrément des mots.

-
Edité par LoupSolitaire 29 novembre 2019 à 18:08:30

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

29 novembre 2019 à 19:17:43

je doit utiliser .isalnum() dans un boucle pour lire des mots '^^ , c'est ce qui es écrit 

non je peut pas c'est a rendre 

-
Edité par PradaSmith 29 novembre 2019 à 19:18:42

  • Partager sur Facebook
  • Partager sur Twitter