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 :

cconvertir un string en int python


Sujet :

Python

  1. #21
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    éventuellement avec du replace.
    Pas d'aide par mp.

  2. #22
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Channelle Voir le message
    oui exactement jai pas traité le cas dans la fonction "extraction_données"...je ne vois pas vraiment comment le faire pour traiter les ("") dans le code jai essayer la methode proposé avec le "int(float('0'+valeur) mais ca marche pas ou cest peut etre moi qui l'ai pas bien fait
    Bien sûr que çà ne marche pas puisque vous êtes parti sur try...except. Mais ce que vous auriez pu en retenir c'est qui faut bien avoir une valeur pas défaut pour remplir les cases ou la conversion en float plante.
    Et dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
         # on essaie de récupérer un float
    except ValueError:
         ....
    quelque part, si la convertion en float "plante", c'est peut être dans le traitement de l'exception qu'il sera judicieux d'assigner une valeur par défaut.

    Citation Envoyé par Channelle Voir le message
    secours please suis pas balaise en python je galere avec tous ces codes...je vous remercie pour vos aide11
    Vous galérez parce que vous voulez programmer sans avoir pris le temps d'ouvrir un tuto. pour apprendre les bases. C'est votre choix.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #23
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Je suis bien d'accord, on a pas trop envie d'aider, car déjà faire des copie d'écran au lieu de copie de texte que l'on met dans la balise code (le petit bouton avec le hashtag - # - ) , c'est très agaçant.

    Si on devait parler du code en général:
    -on charge le fichier une première fois
    -on découpe le fichier en mémoire et on met le résultat ailleurs
    -puis on traite encore ce découpage ailleurs.

    En gros, on prend la taille du fichier que l'on multiplie par 3 et on aura une vague idée de la quantité de mémoire que l'on aura besoin rien que pour le fichier...

    La lecture d'un tuto s'impose vraiment...
    Cordialement.

  4. #24
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    Je savais pas que l'on pouvais inserer directement le code avec le hastag c'est pour cela je prenais des captures d'écran pour montrer...merci pour l'infos ...'ai suivi une serie de tutos sur python avant de commecé a faire ce projet je me suis dit ce sera bien de faire un petit projet ou je pourrias utiliser les étapes appris avec le tuto...je pense que je vais chercher une methode pour remplacer les case vide du fichier par des chiffres zéro (0) directement et pas les enlever...peut etre que ce sera plus simple pour le traitement?

  5. #25
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Channelle Voir le message
    je pense que je vais chercher une méthode pour remplacer les case vide du fichier par des chiffres zéro (0) directement et pas les enlever...peut être que ce sera plus simple pour le traitement?
    Si le calcul est valeur[fin]/valeur[debut], çà va planter à cause de la division par 0.
    Et de toutes façons, s'il n'y a pas de "mesure" de la population à une date donnée, toute valeur par défaut sortira un résultat qui ne voudra rien dire (la division fonctionne mais le nombre que çà sort sera quand même n'importe quoi).
    Il serait peut être moins faux de ne rien sortir là où les informations n'existent pas.
    Ceci dit, on sort un peu de la programmation Python pour se poser des questions sur l'interprétation des résultats produits par le code et de la responsabilité qu'on peut avoir (en tant que programmeur) à gérer les défauts dans les informations.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #26
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bon, allez, j'avais 10 minutes à tuer, donc voici un exemple rapide qui peux traiter au moins toute la première partie moyennant quelques modifications:
    Le fichier exemple à traiter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat /tmp/exemple.csv 
    pays,code,indic,annee 1,annee 2,annee 3
    france,FRE,SP.POP,30,35,47
    espagne,ESP,SP.POP,25,56,98
    angleterre,LDN,SP.POP,60,61,62
    erance,FRE,SP.POP," ",35,47
    dspagne,ESP,SP.POP,00,56,98
    tngleterre,LDN,SP.POP,60.6,61,62
    Le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat sanstitre0.py 
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    pays = {}
    with open("/tmp/exemple.csv",mode='r') as fd:
        fd.readline()
        for ligne in fd:
            ligne=ligne.strip().split(",")
            pays[ligne[0]]={i:int(float(j)) for i,j in zip(range(1960,1960+len(ligne[3:])),ligne[3:]) if j.replace('.','',1).replace('0','').isdigit()}
    for tab in pays:
        print(tab,"=>",pays[tab])
    Un exemple d’exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ python3 ./sanstitre0.py 
    france => {1960: 30, 1961: 35, 1962: 47}
    espagne => {1960: 25, 1961: 56, 1962: 98}
    angleterre => {1960: 60, 1961: 61, 1962: 62}
    erance => {1961: 35, 1962: 47}
    dspagne => {1961: 56, 1962: 98}
    tngleterre => {1960: 60, 1961: 61, 1962: 62}
    Ici, le script crée ton tableau pays, en ne prenant pas en compte les cas ou les données de population sont autre chose qu'un entier ou un flottant ainsi que le cas ou la donnée est zéro.
    Cordialement.

  7. #27
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    @disedorgue,

    Selon l'exemple donné, il me semble que l'utilisation du module csv et sa classe DictReader devrait simplifier grandement la vie.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #28
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Je suis d'accord, mais comme d'après ce qu'elle dit, c'est pour apprendre, je suis resté au même niveau à part peut-être pour la fonction zip.

    PS: Et moi, ça m’entraîne aussi
    Cordialement.

  9. #29
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Dans la même idée, voici une proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import csv
     
    with open('exemple.csv') as f:
        lines = csv.DictReader(f)
        for row in lines:
            for key in row:
                if key.startswith('annee'):
                    try:
                        row.update({key: int(float(row[key]))})
                    except ValueError:
                        continue
            print(row)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #30
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Pas sur que ça l'arrange plus que ça, car par exemple avec une ligne csv du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erance,FRE,SP.POP," ",35,47
    on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OrderedDict([('pays', 'erance'), ('code', 'FRE'), ('indic', 'SP.POP'), ('annee 1', ' '), ('annee 2', 35), ('annee 3', 47)])
    Et d'après ce que j'en ai compris, il faut justement ne pas en tenir compte, tout comme celles avec la valeur zéro...
    d'où mon if j.replace('.','',1).replace('0','').isdigit().

    Mais, bon, à elle de voir tout ça.
    Cordialement.

  11. #31
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Sur un dictionnaire, c'est l'affichage de celui-ci où le filtre doit être appliqué et non sur sa création. Il risque des problèmes liés à la taille du dictionnaire.

    En ce qui me concerne, je remplacerai par None toutes les valeurs non castables, puis je filtrerai pour l'affichage final. Ça ne me fait pas de gros changement (remplacement d'une ligne dans except et sur l'affichage).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import csv
     
    with open('exemple.csv') as f:
        lines = csv.DictReader(f)
        for row in lines:
            for key in row:
                if key.startswith('annee'):
                    try:
                        row.update({key: int(float(row[key]))})
                    except ValueError:
                        row.update({key: None})
            print({k: v for k, v in row.items() if v})
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #32
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Sur un dictionnaire, c'est l'affichage de celui-ci où le filtre doit être appliqué et non sur sa création. Il risque des problèmes liés à la taille du dictionnaire.
    Il y a une raison pour ça, ou c'est juste une règle ?

    Car ici (et je dis bien ici), je ne vois pas l’intérêt de mettre une valeur incorrecte à None, autant ne pas la mettre puisque l'on connait l'intervalle (les clés), on déduit facilement que si celle-ci n'existe pas, que la valeur est invalide.

    Sinon, une version corrigée qui ne charge plus tout en mémoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    with open("/tmp/exemple.csv",mode='r') as fd:
        fd.readline()
        for ligne in fd:
            ligne=ligne.strip().split(",")
            pays={ligne[0]: {i:int(float(j)) for i,j in zip(range(1960,1960+len(ligne[3:])),ligne[3:]) if j.replace('.','',1).replace('0','').isdigit()}}
            for tab in pays:
                print(tab,"=>",pays[tab].items())
    (Bon, je ne suis pas sure qu'elle comprenne tout, mais en tout cas, c'est très instructif pour ma part)
    Cordialement.

  13. #33
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Non ce n'est pas une règle, on va dire l'expérience de bosser avec les dictionnaires et les différentes difficultés lors de certaines modifications des tailles du dictionnaire.
    Après, tant que ça fait le café...

    Pour mes choix je le fais pour diverses raisons,

    • La clé existe, et même si la valeur n'est pas acceptée pour une clé sur une ligne, elle le sera pour d'autres lignes.
    • Si je souhaite modifier la valeur de la clé non valide pour l'écrire dans le fichier par la suite


    Je trouve que mon code est modulable, même si il n'y a pas forcément besoin que ça le soit immédiatement, certains PO exigent par la suite des modifications qui peuvent poser problème selon le code qu'on présente au départ.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. [String][ASCII]Java / Python
    Par chrdou dans le forum Général Java
    Réponses: 8
    Dernier message: 18/02/2005, 14h35
  2. [Débutant] Conversion d'un String en Int
    Par chleuh dans le forum Langage
    Réponses: 9
    Dernier message: 30/12/2004, 13h33
  3. [débutant] String ou int
    Par pingoui dans le forum Langage
    Réponses: 42
    Dernier message: 16/09/2004, 09h16
  4. Réponses: 2
    Dernier message: 21/06/2004, 15h55
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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