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 12/01/2021, à 18:17

chris7522

Affichage un element d'un tuple contenu dans un fichier (python)

[RESOLU] Bonjour a toutes et a tous ,
   J'ai un fichier contenant plusieurs tuples . Je souhaiterai afficher par exemple , le 2 eme élément du 2 eme tuple . Voici le contenu de mon fichier :

(22,444,7778,99)
(33,777,93)
(222,45,23,99,34)

J'ai tenté ca :

def ouverture(var):
    with open(var) as line:
        f = tuple(line)
        print(f[1][1])
        
ouverture('tuple.txt')
        

   J'ai l'impression que peut etre une conversion est nécéssaire , en tout cas , je n'obtiens pas ce que je veux
Merci de votre aide .

Dernière modification par chris7522 (Le 18/01/2021, à 10:59)

Hors ligne

#2 Le 12/01/2021, à 18:30

Vobul

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Par exemple :

#!/usr/bin/env python3
from pathlib import Path
from ast import literal_eval

INPUT_FILE = Path('tuple.txt')

def get_value(file_path: Path) -> int:
    """ Read input file and print the second value of the second tuple """
    with open(file_path) as f:
        lines = f.readlines()
        my_tuple = literal_eval(lines[1].strip('\n'))
        return my_tuple[1]

result = get_value(INPUT_FILE)
print(result)

Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#3 Le 12/01/2021, à 18:42

pingouinux

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Bonjour,

def ouverture(var):
    with open(var) as line:
        f = (line.readlines())
        print(eval(f[1])[1])
        
ouverture('tuple.txt')

Hors ligne

#4 Le 12/01/2021, à 18:46

Vobul

Re : Affichage un element d'un tuple contenu dans un fichier (python)

@pingouinux, il est préférable d'utiliser literal_eval plutôt qu'eval car le premier lancera une exception si le code n'est pas interprétable. "eval is evil" wink


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#5 Le 12/01/2021, à 21:26

chris7522

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Merci a tous les deux de l'aide que vous m'avez apporté !

f = (line.readlines())

Transformer les tuples en chaine est la seule solution ?
En tout cas , tres efficace avec eval , car peu de ligne de code !
J'ai appris quelque chose aujourd'hui .
Par contre les parentheses englobant ' line.readlines() ' étaient elle nécéssaire ?
Bonne soirée .

Hors ligne

#6 Le 12/01/2021, à 21:40

pingouinux

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Vobul #4 a écrit :

il est préférable d'utiliser literal_eval plutôt qu'eval car le premier lancera une exception si le code n'est pas interprétable

Je ne connaissais pas literal_eval, ni le module ast d'ailleurs.

chris7522 #5 a écrit :

Par contre les parentheses englobant ' line.readlines() ' étaient elle nécéssaire ?

Non.

Hors ligne

#7 Le 12/01/2021, à 23:06

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Bonsoir,

chris7522 a écrit :

J'ai un fichier contenant plusieurs tuples .

Non, un fichier ne contient que du texte.
C'est pourquoi les solutions qui t'ont été proposée utilise eval() pour évaluer le texte en quelque chose que python pourrait (au conditionnel) reconnaitre.
La bonne pratique serait de construire correctement ton fichier.
exemple de fichier:

22 444 7778 99
33 777 93
222 45 23 99 34

Pour extraire les data que tu souhaites:

def recherche(txt, ligne_concernee, indice):
    with open(txt) as f:
        for index,line in enumerate(f):
            if index == ligne_concernee:
                print(int(line.split()[indice]))

recherche("txt", 1, indice=1)

#8 Le 13/01/2021, à 08:49

chris7522

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Vobul a écrit :

Par exemple :

from pathlib import Path
from ast import literal_eval

INPUT_FILE = Path('tuple.txt')

def get_value(file_path: Path) -> int:
    """ Read input file and print the second value of the second tuple """
    with open(file_path) as f:
        lines = f.readlines()
        my_tuple = literal_eval(lines[1].strip('\n'))
        return my_tuple[1]

result = get_value(INPUT_FILE)
print(result)

Bonjour Vobul ,
   Je ne comprends pas :

def get_value(file_path: Path) -> int:

...(file_Path:Path) -> int :
Merci de ta réponse .

Hors ligne

#9 Le 13/01/2021, à 09:11

chris7522

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Bonjour pseudofab,
   Merci de ton aide .
   Tout fichier ne contient finalement que du texte ou ne devrai contenir que du texte (dans mon ex , mon fichier est mal construit ) ?
   Parfois , ne récupère t on pas des fichiers contenant toute sorte de choses , par exemple des tuples ?

Hors ligne

#10 Le 13/01/2021, à 09:47

Vobul

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Chris, ce que j'ai fait ça s'appelle du type hinting. En gros ça décrit que la fonction prend un paramètre de type Path et retourne un entier (int). C'est une bonne habitude à prendre, d'avoir des signatures de fonctions claires. Mais tu peux laisser ça pour plus tard car d'après ton deuxième message tu n'as pas encore bien saisi les "types" wink

La remarque de pseudofab est très pertinante et très juste. Quand tu lis un fichier texte, python ne voit que une string. Rien d'autre. Des nombres séparés par des virgules entre parenthèses ce ne sont pas des tuples, ce sont des nombres séparés par des virgules entre parenthèses. Alors certes on peut "eval" mais c'est vraiment pas l'approche correcte.


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#11 Le 13/01/2021, à 09:50

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Avec le format standard, il y a deux modes d'ouverture/écriture : texte ou binaire.
Ils ne gérent pas les types python:

>>> with open("/tmp/test", "w") as f:
	f.write((1,0))

	
Traceback (most recent call last):
  File "<pyshell#2>", line 2, in <module>
    f.write((1,0))
TypeError: write() argument must be str, not tuple
>>> with open("/tmp/test", "w", "b") as f:
	f.write((1,0))

	
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    with open("/tmp/test", "w", "b") as f:
TypeError: an integer is required (got type str)
>>> 

après il existe dans la bibliothèque standard d'autres types de format comme le format Json ... capable de gérer d'autres type de donnée mais pas forcément les types natifs de python (il me semble que les tupples ne sont pas pris en charge par JavaScript)

#12 Le 14/01/2021, à 14:21

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Chris, merci d'éditer les titres de tes posts avec la mention [Résolu] quand ceci le sont. wink

#13 Le 18/01/2021, à 10:04

chris7522

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Vobul a écrit :

Chris, ce que j'ai fait ça s'appelle du type hinting. En gros ça décrit que la fonction prend un paramètre de type Path et retourne un entier (int). C'est une bonne habitude à prendre, d'avoir des signatures de fonctions claires. Mais tu peux laisser ça pour plus tard car d'après ton deuxième message tu n'as pas encore bien saisi les "types"

Desolé de n'avoir pas mentionné [RESOLU] , je vais y penser pour la suite .
Dans le MOOC que j'étudie , il y a une petite introduction sur le type hints , dans quel situation cela peut il etre utile ? je ne vois pas pour le moment l'utilité .

Hors ligne

#14 Le 18/01/2021, à 10:42

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Bonjour,
Ce sont des annotations qui explicitent le type attendu en entrée, et le type en sortie (via return) d'une fonction. ça n'est pas interprété par python.
ça sert à rendre lisible un code et donc à le mieux comprendre, à mieux l'entretenir,  ...     
---
Quel mooc fais-tu?

#15 Le 18/01/2021, à 10:45

Vobul

Re : Affichage un element d'un tuple contenu dans un fichier (python)

chris7522 a écrit :

je ne vois pas pour le moment l'utilité .

Tu la verras plus tard, crois-moi. Mais c'est tout à fait OK d'ignorer ça pour le moment pour se concentrer sur le reste. Après tout, tu fais du python, pas du rust wink


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#16 Le 18/01/2021, à 10:54

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

@Vobul: Perso, pour mes codes j'avoue ne pas l'utiliser. J'utilise plutôt les docstrings ...

#17 Le 18/01/2021, à 10:57

chris7522

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Il s'agit du fun mooc . Il y a de quoi faire !

Hors ligne

#18 Le 18/01/2021, à 11:00

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Oui mais lequel ? car il y a deux moocs différents sur python qui sont proposés par la plateforme fun-mooc

Dernière modification par Compte supprimé (Le 18/01/2021, à 11:01)

#19 Le 18/01/2021, à 14:21

Vobul

Re : Affichage un element d'un tuple contenu dans un fichier (python)

@pseudofab: avec un outil comme mypy tu peux analyser le code et il peut te trouver des bugs genre "ah bah là t'envoies une string alors que c'est un int que la fonction attend". Très utile. Surtout quand ta codebase grossit, et que tu te souviens plus bien quel argument correspond à quoi (c'est un dict? une liste ??). Là en plus tu peux aller plus loin en disant que c'est une List d'integer, ou un dict avec string => bool, bref, c'est à mon avis vraiment une feature du langage à connaître et à utiliser.


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#20 Le 18/01/2021, à 15:45

chris7522

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Il s'agit de " Python 3: des fondamentaux aux concepts avancés du langage ".

Hors ligne

#21 Le 20/01/2021, à 15:42

Compte supprimé

Re : Affichage un element d'un tuple contenu dans un fichier (python)

Vobul a écrit :

bool, bref, c'est à mon avis vraiment une feature du langage à connaître et à utiliser.

C'est une habitude que je n'ai pas prise, probablement par flemme (et comme je le disais, si j'en ressens le besoin j'utilise les docstrings pour expliciter ).
Ceci dit, tu as entièrement raisons et les habitudes ça se change ^^. Merci, pour ton éclairage
D'autres part, je me penche sur le module typing que je trouve très intéressant... 

@chris: Avec ce mooc, tu es dans de très bonnes mains. C'est probablement la meilleure ressource en français pour apprendre/comprendre (et se perfectionner) en python. wink

Dernière modification par Compte supprimé (Le 20/01/2021, à 15:44)