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 10/09/2006, à 11:27

gadjou

Python: besoin d'aide pour fonction split

Bonjour,
J'essaie sans succès de faire fonctionner la desklet "systemMonitor".
Cette desklet écrite en python va lire les fichiers sous /proc/acpi et y récupère des informations sous la forme clef/valeur.
Or sur mon portable, certaine clef n'ont pas de valeur associé et cela fait planter le programme python qui utilise la fonction split().

Je ne connais rien en python et j'aimerai savoir comment corriger le code pour empecher ce plantage (en ignorant les lignes sans valeur associé à la clef).

Concrêtement:
le bout de code en question:

    def parseFile(self, file):
        acpi_data = {}
        acpi_file = open(file, "r")
        acpi_lines = acpi_file.readlines()
        acpi_file.close()
        acpi_lines = map(strip, acpi_lines)
        
        for line in acpi_lines:
            [key, value] = split(":\s+", line)              <- EXCEPTION générée ici
            acpi_data[key] = value
            
        return acpi_data

Le fichier d'input:

present:                 yes
design capacity:         4000 mAh
last full capacity:      3900 mAh
battery technology:      rechargeable
design voltage:          11100 mV
design capacity warning: 0 mAh
design capacity low:     117 mAh
capacity granularity 1:  1 mAh
capacity granularity 2:  1 mAh
model number:            
serial number:           
battery type:            LION
OEM info:                SAMSUNG Electronics

L'exception générée à la lecture la la ligne "model number:":

Traceback (most recent call last):
  File "./SystemMonitor.py", line 1107, in ?
    EventHandler(dirname(__file__)).pause()
  File "./SystemMonitor.py", line 974, in __init__
    adesklets.Events_handler.__init__(self)
  File "/usr/lib/python2.4/site-packages/adesklets/events_handler.py", line 157, in __init__
    self.ready()
  File "./SystemMonitor.py", line 1004, in ready
    self.meters[-1].create((8,tmp_height), self.basedir, meter[1])
  File "./SystemMonitor.py", line 918, in create
    info = self.parseFile(self.info_file)
  File "./SystemMonitor.py", line 905, in parseFile
    [key, value] = split(":\s+", line)
ValueError: need more than 1 value to unpack

Dernière modification par gadjou (Le 10/09/2006, à 11:28)

Hors ligne

#2 Le 10/09/2006, à 16:26

aleph

Re : Python: besoin d'aide pour fonction split

L'algorithme utilisé n'est pas bon, mieux vaut jouer sur les ":" qui séparent la clé de la valeur.
Petite note: une clé sans valeur (string vide) sera également renvoyé.

class cc:

    def parseFile(self, file):
        #read data
        acpi_file = open(file, "r")
        acpi_lines = acpi_file.readlines()
        acpi_file.close()
        #create dictionary...
        acpi_data = {}
        for line in acpi_lines:
            tmp = line.split(':')
            key, value = tmp[0].strip(), tmp[1].strip()
            acpi_data[key] = value
        #... and return it
        return acpi_data

if __name__ == '__main__':
    c = cc()
    #z.txt: data file
    r = c.parseFile('z.txt')
    for e in r.items():
        print e

#3 Le 10/09/2006, à 17:04

gadjou

Re : Python: besoin d'aide pour fonction split

Merci, ca fonctionne. Je me suis permis de partager ton truc sur ce post

Hors ligne

#4 Le 10/09/2006, à 18:14

aleph

Re : Python: besoin d'aide pour fonction split

Quitte à changer, travaille proprement. Change toute la fct par celle proposée et non pas seulement la ligne 904.
La function map n'a aucun sens.

#5 Le 10/09/2006, à 20:18

gadjou

Re : Python: besoin d'aide pour fonction split

Effectivement, je n'avais pas remarqué que tu as modifié également cette partie du code roll. (je ne connais rien à python)

Dernière modification par gadjou (Le 10/09/2006, à 20:19)

Hors ligne