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. #1
    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 cconvertir un string en int python
    bonjour à tous,
    jai un probleme au niveau de mon code, enfaite j'ai un fichier csv avec des noms de pays, nombre d'habitants/années...etc. Je souhaiterais afficher le nombre d'habitant/années pour chaque pays sous forme d'une liste mais jai rencontré une erreur de python. la coversion marche bien mais quand le programme rencontre un chiffre (nombre d'habitant) avec un virgule il me genere une erreur et sarrete automatiquement je ne sais pas comment coriger cela]...pourriez vous m'aider svp parce que cela m'empeche d'avancer sur mon programme ou m'expliquer ou se trouve mon erreur? je vous remercie par avance

    Nom : 1.png
Affichages : 5804
Taille : 45,7 Ko
    [ATTACH=CONFIG]339231[/ATTACH
    Images attachées Images attachées  

  2. #2
    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
    Bonjour,

    Tout simplement parce qu'un float n'est pas un int.
    Cordialement.

  3. #3
    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
    On peut reproduire cette erreur via l'interpréteur python,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> int('52.3')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '52.3'
    Maintenant un autre test,

    Si on fait le même test en transformant en flottant, puis en entier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> int(float('52.3'))
    52
    Si vous voulez des flottants,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> float('52.3')
    52.3
    En utilisant votre interpréteur vous évitez ces erreurs, il faudra y penser
    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)

  4. #4
    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
    bonsoir disedorgue,
    oui vous avez parfaitement raison un float est different d'un int mais dans ma liste je savais pas que yavait des float enfaite c'est pour ca...je pense que je vais essayer de les convertir tous en float pour voir si ca va marcher...merci beaucoup

  5. #5
    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
    bonsoir fre1599,

    jai essayer de transformer finalement tous les chiffre en float puis en entier mais ca marche pas jai toujours une erreur comme le montre la photo..ca mme met toujours "could not convert string to float"....[



    ATTACH=CONFIG]339264[/ATTACH]
    Images attachées Images attachées  

  6. #6
    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
    Il y a sûrement un problème dans votre fichier... Pour vérifier cela, on pourrait faire un test en ajoutant un bloc try-except dans votre code à partir de la ligne 27.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try:
        annee[i] = int(float(valeur))
        i += 1
    except ValueError:
        print("le bug est: {}".format(valeur))
        break
    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)

  7. #7
    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
    Ne pas hésiter à user et abuser des "print(x)" et des print(type(x))".
    Sinon, le code entre balises #, ce serait plus pratique...
    Pas d'aide par mp.

  8. #8
    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
    jai essayer de transformer finalement tous les chiffre en float puis en entier mais ca marche pas jai toujours une erreur comme le montre la photo..ca mme met toujours "could not convert string to float"...
    Une chaîne de caractères vide n'est ni un entier ni un float.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> float('')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: could not convert string to float:
    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> int('')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: ''
    >>>
    Et les messages d'erreurs sont suffisamment explicites.

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

  9. #9
    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
    Soit on test le type de données que l'on a avant de la convertir, ou si on est sur que les possibilités sont "entier","flottant" ou vide, on peut s'en sortir via:
    Cordialement.

  10. #10
    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
    bonjour fred1599,

    jai testé votre solution avec le try et voici ce que ca retourne, il maffiche une liste de valeur ou ya soucis et les case vide du fichier mais je comprend par l'erreur enfaite. je voudais une condition qui fait que s'il rencontre une case vide qu'il passe a la suivante pour ne pas se bloquer et générer une erreur...


    Nom : 7.png
Affichages : 4255
Taille : 44,6 Ko


    Nom : 6.png
Affichages : 3683
Taille : 155,8 Ko

  11. #11
    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
    Bonjour disedorgue,

    J'ai testé la solution que vous proposé mais l'erreur est toujours present...

  12. #12
    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
    Normal, la solution ne fonctionne que dans les cas cités mais il y a des cas ou la chaine n'est pas vide et pas de valeur numérique, donc avant de convertir la chaine, il faut vérifier son contenu et le modifier ou ne pas en tenir compte.

    Donc, la question est: comment veux-tu traiter chaque cas ?
    Cordialement.

  13. #13
    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
    Bonjour disedorgue,

    Oui tout à fait, je voudrais ne pas en tenir compte si la case est vide...

  14. #14
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Le dernier code que tu montres ne doit pas être celui qui lève toutes ces ValueError

    Tu as écrit annee[i] = ... au lieu de annees[i]

    quand tu met if not " " in valeurs: tu vérifies quoi ? Il y a une espace entre les guillemets,c'est voulu ?

    Le break interrompt la boucle for, tu ne devrais pas avoir toute cette succession de ValueError

  15. #15
    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
    @VinsS

    C'est tout à fait ce que je me disais pour le break

    En plus les bugs stipulés dans l'image ne devraient pas tous être présents, sachant qu'ils sont convertissables pour certains... l'erreur est sans doute dans les variables confondues annee et annees.
    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)

  16. #16
    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
    Bonsoir,

    Oui effectivement j'avais fait une erreur sur le variable "annees" je l'ai mal écrit...j'ai corrigé cette erreur cette fois je l'ai bien écrit et jai aussi enlever le "break" pour pas arreter le boucle et voici ce que j'obtiens comme resultat....




    Nom : 9.png
Affichages : 3729
Taille : 107,0 Ko

  17. #17
    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
    Jai pas pris en compte la colonne de mon fichier csv qui contient "SP.POP.TOTL" pour pas que ca me bloque....maintenant mon probléme est que j'arrive pas a faire marcher ma derniere fonction ou je dois calculer la progression de la population entre 1960 et 2016 en faisant une division de " valeur[fin]/valeur[debut" parce que dans le fichier csv ya des ligne ou certains colonne sont vide donc le programme les detecte comme étant des chaines de caractére (" ") et me genere une erreur parce que il n'arrive pas a faire la division...svp comment faire???


    Nom : 10.png
Affichages : 2782
Taille : 121,6 Ko



    Nom : 11.png
Affichages : 2840
Taille : 82,4 Ko

  18. #18
    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
    Salut,

    Citation Envoyé par Channelle Voir le message
    Jai pas pris en compte la colonne de mon fichier csv qui contient "SP.POP.TOTL" pour pas que ca me bloque....maintenant mon probléme est que j'arrive pas a faire marcher ma derniere fonction
    C'est parce que vous n'avez pas traité ce cas là dans la fonction précédente extraction_donnees. Une solution vous a déjà été proposé dans cette réponse. Il faut l'adapter car une chaîne vide ("") n'est pas '""' (i.e. une chaîne contenant 2 x ").

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

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Je ne comprend toujours pas ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        for valeur in valeurs:
            try:
                annees[i] = int(float(valeur[1:-1]))
                i += 1
            except ValuError:
                print("le bug est: {}".format(valeur))
     
                annees[i] = valeur  # C'est quoi ça ?
                i += 1
                pays[nom] = annees  # deux indentations trop loin
    En cas d'erreur, tu ajoutes malgré tout la valeur toujours de type str à annees[]

    De plus la ligne pays[nom] = annees n'est à sa place, elle devrait être indentée au même niveau que le for (12ème caractère).

  20. #20
    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
    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 secours please suis pas balaise en python je galere avec tous ces codes...je vous remercie pour vos aide

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