#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 . (je ne connais rien à python)
Dernière modification par gadjou (Le 10/09/2006, à 20:19)
Hors ligne