Je suis actuellement en train d'utiliser python pour transmettre un dictionnaire python d'un Raspberry Pi à un autre via une liaison 433Mhz, en utilisant un fil virtuel (vw.py) pour envoyer des données.

Le problème avec vw.py est que les données envoyées sont au format chaîne.

Je reçois avec succès les données sur PI_no2, et maintenant j'essaie de reformater les données afin qu'elles puissent être replacées dans un dictionnaire.

J'ai créé un petit extrait pour tester et créé une chaîne temporaire dans le même format qu'elle est reçue à partir de vw.py

Jusqu'à présent, j'ai réussi à diviser la chaîne au niveau des deux points, et j'essaie maintenant de me débarrasser des guillemets doubles, sans grand succès.

my_status = {}
#temp is in the format the data is recieved
temp = "'mycode':['1','2','firstname','Lastname']"

key,value = temp.split(':')
print key
print value

key = key.replace("'",'')
value = value.replace("'",'')

my_status.update({key:value})

print my_status   

Donne le résultat

'mycode'
['1','2','firstname','Lastname']
{'mycode': '[1,2,firstname,Lastname]'}

J'ai besoin que la valeur soit au format

['1','2','firstname','Lastname']

Mais la bande se débarrasse de toutes les marques vocales uniques.

2
user2624229 9 mars 2016 à 21:49

3 réponses

Meilleure réponse

Vous pouvez utiliser ast.literal_eval

import ast
temp = "'mycode':['1','2','firstname','Lastname']"
key,value = map(ast.literal_eval, temp.split(':'))
status = {key: value}

Sortira

{'mycode': ['1', '2', 'firstname', 'Lastname']}
2
cricket_007 9 mars 2016 à 18:56

Cela ne devrait pas être difficile à résoudre. Ce que vous devez faire, c'est strip éliminer le [ ] dans votre chaîne de liste, puis split par ,. Une fois que vous avez fait cela, parcourez les éléments et ajoutez-les à une liste. Votre code devrait ressembler à ceci:

string = "[1,2,firstname,lastname]"
string = string.strip("[")
string = string.strip("]")
values = string.split(",")
final_list = []
for val in values:
    final_list.append(val)
print final_list

Cela reviendra:

> ['1','2','firstname','lastname']

Prenez ensuite cette liste et insérez-la dans votre dictionnaire:

 d = {}
 d['mycode'] = final_list

L'avantage de cette méthode est que vous pouvez gérer chaque valeur indépendamment. Si vous devez convertir 1 et 2 en int, vous pourrez le faire en laissant les deux autres sous la forme str.

0
sulimmesh 9 mars 2016 à 18:57