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 :

.split qui ne fonctionne pas [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut .split qui ne fonctionne pas
    Bonjour, je ne comprend pas l'erreur. Les données que je recueille sur le port série ne se split pas. Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import MySQLdb
    import time
    import serial
     
     
    db = MySQLdb.connect("localhost", "root", "root", "AcrobatX") or die
    ("impossible de se connecter a la bd")
    curs = db.cursor()
     
     
    device = '/dev/ttyUSB0'  # définition du port USB utilise par l'arduino
     
    try:
        print("en cours de connexion..."), device
        # arduino = serial.Serial(device, 9600),
        arduino = serial.Serial(              
                   port='/dev/ttyUSB0',
                   baudrate=57600,
                   parity=serial.PARITY_NONE,
                   stopbits=serial.STOPBITS_ONE,
                   bytesize=serial.EIGHTBITS,
                   timeout=5
               )
    except:
        print("Echec de la connexion"), device
     
    try:
        data = arduino.readline()  # lecture des données de arduino
        print(data)
        print("arduino readline")
        line = data
        print(line)
        pieces = line.split(', ')  # divise les donnees par une tabulation
        print(pieces[x])
        print("line: %s") % data
        print("Piece 1: %s") % pieces[0]
        print("Piece 2: %s") % pieces[1]
        print("Piece 3: %s") % pieces[2]
        print("Piece 4: %s") % pieces[3]
        print("Piece 5: %s") % pieces[4]
     
        try:
            curs.execute("""INSERT INTO sauts 
            (id,piste1,piste2,piste3,piste4,piste5,moment)
            VALUES("%s,%s,%s,%s,%s,NOW()),
            (data)""")
            #(pieces[0],pieces[1],pieces[2],pieces[3,pieces[4],)""")
            db.commit()
            print("Data insere")
            cursor.close()
        except MySQLdb.IntegrityError:
            print("echec de transmission")
        finally:
            cursor.close()
    except:
        print("Impossible d'obtenir du data de l'arduino")
        db.rollback()
    Et voici le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    en cours de connexion...
    b'1, 1, 1, 1, 1\r\n'
    arduino readline
    b'1, 1, 1, 1, 1\r\n'
    Impossible d'obtenir du data de l'arduino
    >>>
    Le branchement est un arduino branché sur le port USB d'un Rasberri py 3b+. Si vous avez une solution, je serai heureux. Merci!

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Le problème avec des try excepts dans des try excepts dans des [...] c'est qu'on ne sais plus à quel moment ça merde.

    Affiche l'erreur except Exception as e: print(e). Sinon pourquoi il y a device qui se balade quelque fois après des print?

    Sinon en survolant le code sur portable j'imagine que la ligne 56 pose problème

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    A la place de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    except:
        print("Impossible d'obtenir du data de l'arduino")
    Utilise ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    except Exception as why:
        print("arduino error: %s" % why)
    Et puis poste ici un copier-coller de l'erreur.

    Ah oui, comment comprendre ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        print("Echec de la connexion"), device
    ?

  4. #4
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut
    Utilise ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    except Exception as why:
        print("arduino error: %s" % why)
    Et puis poste ici un copier-coller de l'erreur.

    VOICI le copier-coller de l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    arduino error: a bytes-like object is required, not 'str'

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 748
    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 748
    Par défaut
    Salut,

    Le paramètre de .split doit être cohérent avec le type de l'objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> s = b'1 2 3'
    >>> s.split(' ')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: a bytes-like object is required, not 'str'
    >>> s.split(b' ')
    [b'1', b'2', b'3']
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tes données sont sous forme de bytes et split() contient un argument str, il faut convertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    >>> a = b'1, 1, 1, 1, 1\r\n'
    >>> a.split(', ')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: a bytes-like object is required, not 'str'
     
    # solution A
    >>> b =  a.split(b', ')
    >>> b
    [b'1', b'1', b'1', b'1', b'1\r\n']
     
    # solution B
    >>> b = a.decode()
    >>> b
    '1, 1, 1, 1, 1\r\n'
    >>> b.split(', ')
    ['1', '1', '1', '1', '1\r\n']
    après, faut nettoyer le dernier item ...

  7. #7
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut J'ai pris la solution B
    Merci beaucoup, J'ai pris la solution B, elle fonctionne très bien. Il me reste juste à corriger un bug sur l'insertion des données dans la BD.

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Allez juste pour la mocheté du geste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list(map(lambda c: c.decode().strip(), pieces.rstrip(b'\r\n').split(b',')))

  9. #9
    Membre averti Avatar de Boudha25
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Par défaut Ça fonctionne aussi
    Citation Envoyé par fred1599 Voir le message
    Allez juste pour la mocheté du geste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list(map(lambda c: c.decode().strip(), pieces.rstrip(b'\r\n').split(b',')))
    J'ai essayé cette ligne et elle fonctionne aussi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Split qui ne fonctionne pas
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/08/2009, 15h03
  2. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  3. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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